점점 이 기능 저기능을 넣다 보면 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 클래스가 간결해진 것을 확인할 수 있다.