본문 바로가기

Programming/Android

Custom ListPreference #2 - onCreateDialogView

반응형
#1 에서 검색할 결과를 바탕으로 테스트 해보았습니다.

xml/setup.xml

	

ColorListPreference.java
package android.test;

import android.content.Context;
import android.preference.ListPreference;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AbsListView.LayoutParams;

public class ColorListPreference extends ListPreference {

	public ColorListPreference(Context context, AttributeSet attrs) {
		super(context, attrs);
	}
	
	public View onCreateDialogView(){
		ListView view = new ListView(getContext());
		view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
		view.setAdapter(new ArrayAdapter(getContext(),android.R.layout.simple_list_item_single_choice,getEntries()));
		
		return view;
	}
}


위 그림은 이클립스의 Hierarchy View perspective 로 본 그림입니다. 3번째 layout 에서 크게 4가지로 분리되는 것이 보입니다. 이 4가지가 topPanel, contentPanel, customPanel, buttonPanel 입니다. 
우리가 원했던 대로 contentPanel에는 아무것도 출력되지 않았고 customPanel에만 출력이 되었습니다



그런데 이게... 뭘까요? 기존의 형식을 유지하면서 나오길 원했는데... 이건 전혀 그렇지 않네요...;
처음부터 잘못 생각했었습니다. customPanel을 건드리는게 아니라 contentPanel을 건드려야 겠구나....

contentPanel은 어떻게 건드릴 까요?

여러가지로 테스트해본 결과 건드릴 수가 없었습니다. contentPanel의 부분은 AlertDialog.Builder 에서 생성된 내용이 들어가는 부분인듯 합니다. 그럼 당연히 Builder를 통해서 리스트를 생성해야 겠지요. 

그럼 AlertDialog.Builder은 어디서 건드리지?????


안드로이드 개발자 사이트에서 확인해 보니 DialogPreference에는 onPrepareDialogBuilder이 있습니다.
이 메소드에서는 Dialog를 생성하는 것이 아니라 preference를 클릭하여 Dialog를 보여지기 전에 실행됩니다.
그래서 이곳에서 builder를 이용해서 수정하여 보여주는 것입니다 !!!



반응형