점점 이 기능 저기능을 넣다 보면 Activity 클래스가 복잡해진다. 그 문제를 해결하기 위해서 아마도 구글에 그 똑똑하다는(? 정말?) 애들이 XML 기반의 레이아웃을 사용하는 방식을 쓴것 같다.
AndroidAPISummary 클래스에 있는 setButtons() 메소드를 다음과 같이 MainButtonManager 클래스를 만들어서 넣도록 하자.
| package com.min.summary;  import android.app.AlertDialog; import android.content.Intent;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup.LayoutParams;
 import android.widget.Button;
 import android.widget.LinearLayout;
 import android.widget.Toast;
 public class MainButtonManager { AndroidAPISummary parent;
 LinearLayout parentLayout;
 LayoutParams lpFillWrap=new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
 public MainButtonManager(AndroidAPISummary parent,LinearLayout  linearLayout) {
 this.parent=parent;
 parentLayout=linearLayout;
 }
 protected void setButtons() {
 Button alertButton=new Button(parent);
 alertButton.setText("Show alert");
 alertButton.setOnClickListener(new OnClickListener() {
 public void onClick(View view) {
 alertMessage("Clicked");
 }
 });
 parentLayout.addView(alertButton, lpFillWrap);
 
 for(int loop=0;loop<20;loop++) {
 Button but=new Button(parent);
 parentLayout.addView(but, lpFillWrap);
 but.setText("Button"+loop);
 but.setTag("Button"+loop);
 but.setOnClickListener(new OnClickListener() {
 public void onClick(View view) {
 viewMessage("OK",Toast.LENGTH_SHORT);
 }
 });
 }
 }
 private void viewMessage(String data, int messageLength) {
 Toast t=Toast.makeText(parent,data,messageLength);
 t.show();
 }
 private void alertMessage(String data) {
 AlertDialog.show(parent, "This is a title 1", R.drawable.icon,
 "This is a message 2","Button text", true);
 }
 }
 | 
여기서 중요한 것은 parent와 parentLayout이다.
이 클래스에는 this로 사용해야하는 AndroidAPISummary 객체와 버튼을 담아놓을 LinearLayout이 없기 때문에 Activity클래스에서 넘겨주어야만 한다.
그럼 바뀐 AndroidAPISummary 는 어떻게 바뀌었을까?
| package com.min.summary;  import android.app.Activity;//// import android.os.Bundle;////
 import android.view.Menu; import android.view.ViewGroup.LayoutParams;
 import android.widget.LinearLayout;
 import android.widget.ScrollView;
 public class AndroidAPISummary extends Activity {
 LinearLayout  linearLayout;
 LayoutParams lpFillWrap=new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
 MenuManager menuManager;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle icicle) {
 super.onCreate(icicle);
 ScrollView sv=new ScrollView(this);
 linearLayout=new LinearLayout(this);
 linearLayout.setOrientation(LinearLayout.VERTICAL);
 MainButtonManager mbManager=new MainButtonManager(this,linearLayout);
 mbManager.setButtons();
 sv.addView(linearLayout,lpFillWrap);
 setContentView(sv);
 }
     public boolean onCreateOptionsMenu(Menu menu) { boolean result = super.onCreateOptionsMenu(menu);
 menuManager=new MenuManager(menu);
 return result;
 }
 } | 
보다 AndroidAPISummary 클래스가 간결해진 것을 확인할 수 있다.