[컴][폰] Custom ListView 만들기

Custom view 생성, 만들기, Custom ListView 만들기

나만의 ListView 만들기

나만의 ListView 를 상속받아서 만들고 사용할 때의 기본적인 사항을 익혀보자.
  1. Custom class 생성. 먼저 ListView 를 상속해서 class 를 하나 만들자. 이름은 testListView 로 하자.
  2. Constructour 작성. 3개의 Constructor 를 모두 만들자.
  3. Activity 생성. 다음으로 필요한 것은 View 를 실제로 보여줄 Activity 이다. Activity 를 하나 만들도록 하자. 이름은 MainActivity로 Activity 를 상속 받으면 된다.
  4. setContentView(). setContentView(R.layout.main_activity)
  5. findViewById(). TestListView tlv = (TestListView)findViewById(R.id.listview)
이렇게 기본적인 사항이 갖춰진 후에 자신이 원하는 대로 요리하면 되겠다. 좀 더 자세한 얘기는 시간이 되는대로 하기로 하자.
참고로 예제 소스는 ref.2 에서 찾아보면 된다.

image


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);
    }




setContentView(activityl_xml_file_name) 을 findViewById() 보다 항상 먼저 호출해야 한다. setContentView 를 호출할 때 activiyl_xml에 정의된 View 들이 만들어 지기 때문이라고 한다.

@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);
}





See Also


  1. Declaring a custom android UI element using XML


References

  1. Android Custom View 의 생성
  2. IndexableListView source
  3. [Android] CustomView 만들기
  4. http://developer.android.com/guide/topics/ui/declaring-layout.html

댓글 없음:

댓글 쓰기