0

私はアクティビティでこれから始めます:

adapter = new ItemAdapter(Items.this, items, totals);
        setListAdapter(adapter);

これがItemAdapterです。

public class ItemAdapter extends ArrayAdapter<String> {

private final List<String> items;
private final List<String> totals;
private final Context context;

public ItemAdapter(Context context, List<String> items,
        List<String> totals) {
    super(context, R.layout.item_row_layout, items);
    this.context = context;
    this.items = items;
    this.totals = totals;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater
            .inflate(R.layout.item_row_layout, parent, false);
    TextView t1 = (TextView) rowView.findViewById(R.id.itemName);
    TextView t2 = (TextView) rowView.findViewById(R.id.itemTotal);

    String s1 = items.get(position);
    t1.setText(s1);

    String s2 = totals.get(position);
    t2.setText(s2);


    return rowView;
}

}

これで、コンストラクターに問題があることがわかりました。これは、2つではなく1つのリストしか渡せないためです。これを行う別の方法はありますか?

4

4 に答える 4

5

SimpleAdapterを使用することをお勧めします。リストを1つのリスト<マップ<...>>に変換する方法は次のとおりです(ただし、個別のリストを作成する場合は、1つのリスト<マップ<... >>を作成することをお勧めします)。

List<Map<String, String>> list = new ArrayList<Map<String, String>>();
Map<String, String> map;
int count = items.size();
for(int i = 0; i < count; i++) {
    map = new HashMap<String, String>();
    map.put("name", items.get(i));
    map.put("total", totals.get(i));
    list.add(map);
}

adapter = new SimpleAdapter(this, list, R.layout.item_row_layout, new String[] { "name", "total" }, new int[] { R.id.itemName, R.id.itemTotal });

nameこれで、カスタムアダプタを作成しなくても、とtotalが独自のビューに1行で自動的に表示されます。

于 2012-07-20T18:00:47.930 に答える
3

追加のリストに対応するために、コンストラクターにもう1つの引数を追加します。ただし、スーパーコールでその追加リストを渡さないでください。

次に、getViewメソッドでその2番目のリストにアクセスします。コードを見てください:

  public class NotificationsAdapter extends ArrayAdapter<String> {
      private Context context;
      private List<String> list;
      private List<String> listTimeStamp;      

      public NotificationsAdapter(Context context, List<String> resource,List<String> timeResource) {
          super(context, R.layout.notification_list_item, resource);
          this.context = context;
          this.list = resource;
          this.listTimeStamp= timeResource;
      }      

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          View rowView = inflater.inflate(R.layout.notification_list_item, parent, false);      

          TextView textViewMessage = (TextView) rowView.findViewById(R.id.text_view_notifications_list_item);
          textViewMessage.setText(list.get(position));      

          ImageView imageView = (ImageView) rowView.findViewById(R.id.logo_notifications_list_item);
          imageView.setImageResource(R.drawable.iconsmall);      

          TextView textViewTimeStamp = (TextView) rowView.findViewById(R.id.time_stamp_notifications_list_item);
          textViewTimeStamp.setText(listTimeStamp.get(position));      

          return rowView;
      }
  }
于 2015-02-28T13:59:09.000 に答える
2

両方のリストに参加してみませんか?

List<String> list1 = new ArrayList<String>();
a.add("Item 1");
a.add("Item 2");

List<String> list2 = new ArrayList<String>();
b.add("Item 3");
b.add("Item 4");

// Append content of list2 to list1
list1.addAll(list2);

次に、単一のリストを使用して、通常どおりアダプターを作成できます。

于 2012-07-20T17:51:12.337 に答える
2

必要なオプションの1つは、コンストラクターを変更して、 Thenの代わりに受け入れるようにすることList<List<String>>です。その代わりに、パラメーター内のすべてのサブリストを反復処理し、各要素をローカルオブジェクトアイテムに追加する必要があります。List<String>this.items = items;

もう1つの、おそらくもっと簡単な解決策は、複数のリストをマージしてから、パラメーターとしてコンストラクターに送信することです。つまり、このようなList.addAll()のようなメソッドを使用できます

List.addAll(anotherListObject);

すべてのアイテムを含む1つのリストを作成するために必要な回数だけ。

さらに別のオプションは、CommonsGuyが作成したMergeAdapterを使用し、リストのマージを心配することなく、複数のアダプターを作成してそれらすべてを1つのMergeAdapterにマージできるようにすることで、プロセスを簡素化することです。

于 2012-07-20T17:51:48.027 に答える