2010-01-21 68 views
17

任何人都可以提供給我two_line_list_item的例子嗎?任何人都可以在Android中爲我提供Two_line_list_item的示例嗎?

+0

[這裏](HTTP://mylifewithandroid.blogspot。 com/2008/03/my-first-meeting-with-simpleadapter.html)你可以找到一個例子。此樣式爲您提供了一個包含兩行文本的項目,可能具有不同的格式。 – 2010-01-21 13:36:43

+0

這不是一個TwoLineListItem視圖,本教程使用簡單的ListView。 – mudit 2011-01-19 10:15:57

回答

37

我還沒有找到一個實際使用內置佈局的例子,android.R.layout.two_line_list_itemListView insp ListActivity。所以在這裏。

如果您趕時間,下面的覆蓋TwoLineArrayAdapter.getView()是使用默認two_line_list_item佈局的重要部分。

你的數據

你有一個類定義列表項。我會假設你有這些數組。

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

抽象TwoLineArrayAdapter

這個抽象類可以重複使用,使後來確定兩行ListView容易得多。你可以提供你自己的佈局,但這兩個參數的構造函數使用內置的two_line_list_item佈局。 自定義列表項目佈局的唯一要求是他們必須使用@android:id/text1@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

最後,這裏是你寫具體到你的Employee類,以便它會在你的ListView渲染代碼。

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()方法,你就會有代碼看起來像這樣:

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 2013-06-04 21:41:00

相關問題