2011-10-31 8 views
1

リスト行に別々のアイテムを表示しようとしています。だから私は4つのtextviewsを使用します。しかし、私はクラスのアクティビティを拡張するためにarrayadapterを使用します。今私は、そのテキストビューに応じて、行の文字列のリストを配置する必要があります。これを達成する方法は?どんな助けも高く評価されており、ありがとうございます。リストビューのArrayAdapter内で複数のテキストビューを使用するにはどうすればよいですか?

答えて

8

通常、私はそのような場合にはArrayAdapterを延長しています。一般に、アダプター内の2つの関数getView()とコンストラクターの1つのみをオーバーライドする必要があります。

アダプタのコードは以下の通りです:代わりにArrayAdapterの

/** class to act as list adapter for rows List */ 
private static class FourTextListAdapter extends ArrayAdapter<MyDataClass> { 

    /** To cache views of item */ 
    private static class ViewHolder { 
     private TextView text1; 
     private TextView text2; 
     private TextView text3; 
     private TextView text4; 

     /** 
     * General constructor 
     */ 
     ViewHolder() { 
      // nothing to do here 
     } 
    } 

    /** Inflater for list items */ 
    private final LayoutInflater inflater; 

    /** 
    * General constructor 
    * 
    * @param context 
    * @param resource 
    * @param textViewResourceId 
    * @param objects 
    */ 
    public FourTextListAdapter(final Context context, 
      final int resource, 
      final int textViewResourceId, 
      final List<User> objects) { 
     super(context, resource, textViewResourceId, objects); 

     this.inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public View getView(final int position, final View convertView, final ViewGroup parent) { 

     View itemView = convertView; 
     ViewHolder holder = null; 
     final MyDataClass item = getItem(position); 

     if(null == itemView) { 
      itemView = this.inflater.inflate(R.layout.four_texts_item, parent, false); 

      holder = new ViewHolder(); 

      holder.text1 = (TextView)itemView.findViewById(R.id.text1); 
      holder.text2 = (TextView)itemView.findViewById(R.id.text2); 
      holder.text3 = (TextView)itemView.findViewById(R.id.text3); 
      holder.text4 = (TextView)itemView.findViewById(R.id.text4); 

      itemView.setTag(holder); 
     } else { 
      holder = (ViewHolder)itemView.getTag(); 
     } 

     holder.text1.setText(item.getText1()); 
     holder.text2.setText(item.getText2()); 
     holder.text3.setText(item.getText3()); 
     holder.text4.setText(item.getText4()); 

     return itemView; 
    } 
} 
+1

+1これに同意すると、BaseAdapterも拡張できます。 –

+0

どちらが私の場合にBaseAdapterとArrayAdapterのどちらを選択するかhttp://stackoverflow.com/questions/10617093/listview-and-arrayadapter-issue-how-do-i-proceed – aProgrammer

4

SimpleAdapterを使用してみてください。上記のコードで

ArrayList<HashMap<String, String>> sampleArrayList; 
SimpleAdapter sampleListAdapter; 

HashMap<String, String> sampleObjectMap; 

for (SampleObject sampleObj : sampleList) { 
    sampleObjectMap= new HashMap<String, String>(); 
     sampleObjectMap.put("value1", sampleObj.getValue1()); 
     sampleObjectMap.put("value2", sampleObj.getValue2()); 
    sampleObjectMap.put("value3", sampleObj.getValue3()); 
    sampleObjectMap.put("value4", sampleObj.getValue4()); 

     sampleArrayList.add(sampleObjectMap); 
} 

sampleListAdapter= new SimpleAdapter(
      context, sampleArrayList, 
      R.layout.custom_list_layout, new String[] { 
        "value1", "value2" , "value3", "value4"}, 
        new int[] { R.id.list_content_column1, 
          R.id.list_content_column2, 
          R.id.list_content_column3, 
          R.id.list_content_column4}); 

     sampleListView.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       HashMap<String, String> sampleObjectMapLocal = sampleArrayList 
            .get(position); 
       final String value1Obj = sampleObjectMapLocal          .get("value1"); 

       System.out.println("value1Obj : " + value1Obj); 

      } 
     }); 

リストビューの内容は sampleArrayListのArrayList を使用して移入されたので、任意の列の項目はキー(「値1」、「値2」、「値3」、「value4を使用してアクセスすることができます")。

これが役に立ちます。

関連する問題