2013-05-08 2 views
0

보기를 위해 리소스 (일명 XML 레이아웃)를 참조하지 않고 인플레이레이터 서비스를 사용하고 싶지도 않습니다.BaseAdapter를 파생시키고 XML없이보기를 사용자 정의하는 방법은 무엇입니까?

목록보기 예제에서는 많은 페이지를 보았지만 모두 ArrayAdapter 또는 CursorAdapter에서 클래스를 파생시키는 것으로 보입니다.

그렇다면 누구나 BaseAdapter에서 클래스를 파생시키고 'getView'메소드를 수정하여 사용자 정의 목록 뷰를 만드는 방법에 대한 예제를 보여줄 수 있습니까?

+0

ArrayAdapter 또는 CursorAdapter 문제가 무엇입니까? 컨벤션에 반대하는 귀하의 요구 사항을 명시하십시오. – CRUSADER

+0

ArrayAdapter의 문제는 위에서 설명한대로이며 뷰 생성을 XML로 처리하고 싶지 않습니다. CursorAdapter를 사용하면 목록의 간단한 구현이 필요하므로 여기서는 SQL 데이터베이스를 다루지 않을 것입니다. – CodenameLambda1

답변

1

뷰를 만들고 Java에서 프로그래밍 방식으로 속성을 설정할 수 있습니다. AWT/Swing 사용법과 거의 동일합니다.

public class MyAdapter extends BaseAdapter { 
    private List<String> items; // could be an array/other structure 
           // using Strings as example 

    public MyAdapter(Context context, List<String> items) { 
     this.context = context; 
     this.items = new ArrayList<String>(items); 
    } 

    public int getCount() { 
     return items.size(); 
    } 

    // notice I changed the return type from Object to String 
    public String getItem(int position) { 
     return items.get(position); 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // Really dumb implementation, you should use the convertView arg if it isn't null 
     TextView textView = new TextView(context); 
     textView.setText(getItem(position); 
     /* call other setters on TextView */ 

     return textView; 
    } 
} 

당신은 다른 메소드를 오버라이드 (override) 할 수도 있지만 별다른 설명이 있어야한다.

+0

감사합니다. XML없이 목록보기를 생성 할 수있었습니다. 그러나 나는 또 다른 질문을 가지고있다. 내가 준비하는이 텍스트 뷰에 버튼과 같은 다른 뷰를 추가 할 수 없습니다. 어떻게해야합니까? 내가 만든 새 버튼에 레이아웃 매개 변수를 적용하려고하면 응용 프로그램이 충돌합니다. – CodenameLambda1

+0

'TextView'에 Button을 추가 할 수 없습니다. 'LinearLayout' (또는'ViewGroup'의 다른 하위 클래스)을 생성하고 뷰를 추가해야합니다. getView()에서 레이아웃을 반환 할 것이다. – Karakuri

관련 문제