2010-01-21 3 views
17

아무도 나에게 two_line_list_item 예제를 제공 할 수 있습니까?는 Android에서 Two_line_list_item의 예를 제공 할 수 있습니까?

+0

[여기] (HTTP : //mylifewithandroid.blogspot

public class EmployeeArrayAdapter extends TwoLineArrayAdapter<Employee> { public EmployeeArrayAdapter(Context context, Employee[] employees) { super(context, employees); } @Override public String lineOneText(Employee e) { return e.name; } @Override public String lineTwoText(Employee e) { return e.title; } } 

은 Activity.onCreate() 액티비티의 onCreate() 방법에서

, 당신은 다음과 같습니다 코드를해야합니다. com/2008/03/my-first-meeting-with-simpleadapter.html)에서 예제를 찾을 수 있습니다. 이 스타일은 두 행의 텍스트가있는 항목을 제공하며 다른 서식을 사용할 수도 있습니다. –

+0

TwoLineListItem보기가 아니므로이 자습서에서는 간단한 ListView를 사용합니다. – mudit

답변

37

android.R.layout.two_line_list_itemListView insted가 ListActivity 인 내장 레이아웃을 실제로 사용하는 예는 아직 찾을 수 없습니다. 그래서 여기에 간다.

바쁘신 경우 TwoLineArrayAdapter.getView() 무시는 기본 two_line_list_item 레이아웃 사용의 중요한 부분입니다.

귀하의 데이터

당신은 당신의 목록 항목을 정의하는 클래스가 있습니다. 나는 당신이 이것들을 가지고 있다고 가정 할 것이다.

public class Employee { 
    public String name; 
    public String title; 
} 

추상 TwoLineArrayAdapter

이 추상 클래스는 재사용 할 수

, 나중에 두 줄의 ListView 훨씬 쉽게 정의 할 수 있습니다. 은 자신의 레이아웃을 제공 할 수 있지만 두 개의 인수 생성자는 기본 제공 two_line_list_item 레이아웃을 사용합니다. 사용자 지정 목록 항목 레이아웃의 유일한 요구 사항은 및 @android:id/text2을 사용하여 TextView 개의 자식을 식별해야하며, 마찬가지로 two_line_list_item과 동일해야합니다.

public abstract class TwoLineArrayAdapter<T> extends ArrayAdapter<T> { 
     private int mListItemLayoutResId; 

     public TwoLineArrayAdapter(Context context, T[] ts) { 
      this(context, android.R.layout.two_line_list_item, ts); 
     } 

     public TwoLineArrayAdapter(
       Context context, 
       int listItemLayoutResourceId, 
       T[] ts) { 
      super(context, listItemLayoutResourceId, ts); 
      mListItemLayoutResId = listItemLayoutResourceId; 
     } 

     @Override 
     public android.view.View getView(
       int position, 
       View convertView, 
       ViewGroup parent) { 


      LayoutInflater inflater = (LayoutInflater)getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      View listItemView = convertView; 
      if (null == convertView) { 
       listItemView = inflater.inflate(
        mListItemLayoutResId, 
        parent, 
        false); 
      } 

      // The ListItemLayout must use the standard text item IDs. 
      TextView lineOneView = (TextView)listItemView.findViewById(
       android.R.id.text1); 
      TextView lineTwoView = (TextView)listItemView.findViewById(
       android.R.id.text2); 

      T t = (T)getItem(position); 
      lineOneView.setText(lineOneText(t)); 
      lineTwoView.setText(lineTwoText(t)); 

      return listItemView; 
     } 

     public abstract String lineOneText(T t); 

     public abstract String lineTwoText(T t); 
} 

구체적인 TwoLineArrayAdapter 마지막으로

는, 여기 당신의 ListView에 렌더링 수 있습니다 있도록 당신이 당신의 직원 클래스에 특정 작성하는 코드입니다.

employees = new Employee[...]; 
    //...populate the employee array... 

    employeeLV = (ListView)findViewById(R.id.employee_list); 
    employeeLV.setAdapter(new EmployeeArrayAdapter(this, employees); 
+0

끝내 대답, 고마워. 그 컨텍스트에서 올바르게 표시되도록 getDropDownView (int position, View convertView, ViewGroup parent)를 추가로 구현하는 것이 좋습니다. 구현은 다음과 같을 수 있습니다. return getView (...) – Keith

관련 문제