2010-01-21 14 views
17

Herhangi biri bana iki_line_list_item örneği verebilir mi?herhangi biri bana Android'de Two_line_list_item örneğini sağlayabilir?

+0

[İşte] (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() sizin etkinlik'ın onCreate() yöntemde

, şuna benzer bir kod olacak. com/2008/03/ilk toplantı-ile-simpleadapter.html) bir örnek bulabilirsiniz. Bu stil, size muhtemelen farklı biçimlendirmelerle iki satırlık metin içeren bir öğe verir. –

+0

İkili bir ListItem görünümü değil, bu öğretici basit bir ListView kullanıyor. – mudit

cevap

37

Aslında yerleşik düzen, android.R.layout.two_line_list_item kullanan bir örnek bulmak için henüz bir ListViewListActivity insted. Yani işte gidiyor.

Eğer aceleniz varsa, TwoLineArrayAdapter.getView() aşağıdaki geçersiz kılma, varsayılan two_line_list_item mizanpajının kullanılmasının önemli bir parçasıdır.

Veri

Listenizi öğelerini tanımlayan bir sınıf var. Bunların bir dizi var olduğunu varsayacağım.

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

bir soyut TwoLineArrayAdapter

Bu soyut sınıf yeniden kullanılabilir

ve daha sonra iki satır ListView çok daha kolay tanımlama yapar. , kendi düzeninizi sağlayabilirsiniz, ancak iki bağımsız değişken kurucu, yerleşik two_line_list_item düzenini kullanır. Özel liste öğesi düzenleri için tek gereksinim, two_line_list_item'un yaptığı gibi TextView çocuklarını tanımlamak için @android:id/text1 ve @android:id/text2 kullanmalarıdır.

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

beton TwoLineArrayAdapter Nihayet

, işte senin ListView işleneceğini edeceğiz böylece size Çalışan sınıfına özgü yazma kod.

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

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

Harika cevap, teşekkürler. ek olarak getDropDownView (int position, View convertView, ViewGroup üst bilgisi) uygulamalarını önerebilirim, böylece bu bağlamda doğru şekilde görünecektir. Uygulamanız basitçe şöyle olabilir: getView (...) – Keith

İlgili konular