나만의 ListView 만들기
나만의 ListView 를 상속받아서 만들고 사용할 때의 기본적인 사항을 익혀보자.- Custom class 생성. 먼저 ListView 를 상속해서 class 를 하나 만들자. 이름은 testListView 로 하자.
- Constructour 작성. 3개의 Constructor 를 모두 만들자.
- Activity 생성. 다음으로 필요한 것은 View 를 실제로 보여줄 Activity 이다. Activity 를 하나 만들도록 하자. 이름은 MainActivity로 Activity 를 상속 받으면 된다.
- setContentView(). setContentView(R.layout.main_activity)
- findViewById(). TestListView tlv = (TestListView)findViewById(R.id.listview)
참고로 예제 소스는 ref.2 에서 찾아보면 된다.
ListView 상속시 주의할 점
ListView 를 상속할 때 주의할 점이다. Ref. 1 에서 설명하고 있지만, 반드시 경우에 맞는 생성자가 존재해야 한다. 그렇지 않으면 compile 은 잘 되지만, runtime 시 layout inflate 를 하면서 죽는다.public class TestListView extends ListView { /** * The below 3 Contructors MUST be here */ /** * only used as the view is created in the source */ public TestListView(Context context) { super(context); } /** * used the case view of xml file is defined */ public TestListView(Context context, AttributeSet attrs) { super(context, attrs); } /** * used the case PROPERTY is defined in xml */ public TestListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }
…
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("mylog","onCreate"); setContentView(R.layout.main_activity); mItems = new ArrayList<String>(); mItems.add("A - Test item"); mItems.add("B - Test item"); mItems.add("C - Test item"); mItems.add("D - Test item"); mItems.add("E - Test item"); mItems.add("F - Test item"); mItems.add("F - Test item"); mItems.add("G - Test item"); mItems.add("H - Test item"); mItems.add("I - Test item"); mItems.add("I - Test item"); mItems.add("I - Test item"); mItems.add("I - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); mItems.add("J - Test item"); Collections.sort(mItems); ContentAdapter adapter = new ContentAdapter(this, android.R.layout.simple_list_item_1, mItems); mListView = (IndexableListView) findViewById(R.id.listview); mListView.setAdapter(adapter); mListView.setFastScrollEnabled(true); }
댓글 없음:
댓글 쓰기