2012-11-27 36 views
13

私はTwoLineListItemは次のように私はListActivityアダプタを設定していた場合、これに代わるものです何API 17で廃止されることに気づく?:ListActivity TwoLineListItem代替

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

:あなたのような、モード選択を使用している場合ちょうど選択状態を対応するいくつかの背景を追加します。 – prprcupofcoffee

答えて

15

単にTwoLineListItemのソースコードをカット&ペーストあなた自身のレイアウトへ:

<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> 

(。私は一貫性のIDを変更注意してください)

今両方TextVへの参照を保持しますViewHolderを使用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

これは 'ArrayAdapter'sと一緒に使用すると動作しません。 – SagunKho

6

これは、私はそれをやった方法です:それはあなたのためにあまりにも悪いわけではないので

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

まず、推奨されません。これはいつまでもサポートされるためです。 ;)

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

あなたが任意のレイアウトを自由に使用することが!あなたは適切なスタイリングと、それに2つのテキスト `View`sを持ってView``自分自身を書くことができ

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

非推奨とは、何かを使用すべきではないと言うことです。将来は期待どおりに動作しないかもしれません。あなたが知っているなら、なぜリスクを冒すのですか? –