2012-11-27 14 views
13

Ben TwoLineListItem ?:ListActivity TwoLineListItem Alternatif

ArrayAdapter<File> adapter = new ArrayAdapter<File>(this,android.R.layout.simple_list_item_2,filesArrayList){ 
      @Override 
      public View getView(int position, View convertView, ViewGroup parent){ 
       final TwoLineListItem row; 
       if(convertView == null){ 
        LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        row = (TwoLineListItem)inflater.inflate(android.R.layout.simple_list_item_2, null); 
       }else{ 
        row = (TwoLineListItem)convertView; 
       } 
       row.getText1().setText(filesArrayList.get(position).getTitle()); 
       row.getText2().setText2(filesArrayList.get(position).getDescription()); 
       return row; 
      } 

     }; 
+0

: Eğer gibi bir mod seçimi kullanıyorsanız Sadece seçilen devlet yanıt vermek için biraz bilgi ekleyin. – prprcupofcoffee

cevap

15

Basitçe kesilmiş takip eder ve TwoLineListItem kaynak kodunu yapıştırın gibi bir ListActivity adaptörü kuruyorum eğer bu alternatifi nedir API 17. itibariyle kullanım dışı olduğunu fark kendi bir düzen içine:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <TextView android:id="@+id/text1" 
     android:textSize="16sp" 
     android:textStyle="bold" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

    <TextView android:id="@+id/text2" 
     android:textSize="16sp" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

</LinearLayout> 

(dikkat edin ben tutarlılık için kimlikleri değişti.)

Şimdi hem TextV başvurular tutan bir ViewHolder kullanmak IEWS:

public View getView(int position, View convertView, ViewGroup parent){ 
    ViewHolder holder; 
    if(convertView == null){ 
     // You should fetch the LayoutInflater once in your constructor 
     LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.list_item_2, null); 

     // Initialize ViewHolder here 
    }else{ 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    File file = filesArrayList.get(position); 
    holder.text1.setText(file.getTitle()); 
    holder.text2.setText2(file.getDescription()); 
    return convertView; 
} 
+0

Bu, ArrayAdapter işleviyle kullanıldığında çalışmaz. – SagunKho

6

Bu nasıl yaptığımı: yani sizin için çok kötü değil bu yüzden

mAdapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_2, mListItems) 
    { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      View row; 
      if(convertView == null) 
      { 
       row = (View)mInflater.inflate(android.R.layout.simple_list_item_2, parent, null); 
      } 
      else 
      { 
       row = (View)convertView; 
      } 
      TextView v = (TextView) row.findViewById(android.R.id.text1); 
      v.setText(mListItems[position]); 
      v = (TextView) row.findViewById(android.R.id.text2); 
      v.setText(mListSubItems[position]); 
      return row; 
     } 
    }; 
ListView lv = (ListView) getActivity().findViewById(R.id.runsListView); 
    lv.setAdapter(mAdapter); 
    lv.setOnItemClickListener(mMessageClickedHandler); 
0

Birincisi, kullanımdan kaldırılmıştır. Çünkü sonsuza kadar desteklenecek. ;)

If it ain’t broke, don’t fix it.

herhangi düzenini kullanmakta serbesttirler! Uygun stil içinde iki metni `View`s vardır View`` Kendi yazabilirsiniz

android:background="?android:attr/activatedBackgroundIndicator" 
+2

Kullanımdan kaldırma, bir şeyin kullanılmaması gerektiğini ve gelecekte de beklendiği gibi çalışmayacağını söylemek gibidir. Öyleyse neden risk almalısın? –