1. ホーム
  2. android

[解決済み] ArrayAdapter<myClass> の使用方法

2022-07-12 21:21:14

質問

ArrayList<MyClass> myList = new ArrayList<MyClass>();

ListView listView = (ListView) findViewById(R.id.list);

ArrayAdapter<MyClass> adapter = new ArrayAdapter<MyClass>(this, R.layout.row,
    to, myList.);
listView.setAdapter(adapter);

クラス MyClass

class MyClass {
    public String reason;
    public long long_val;
}

layoutsでrow.xmlを作成しましたが、ArrayAdapterを使用してListViewにreasonとlong_valの両方を表示する方法が分かりません。

どのように解決するのですか?

自分のクラスにカスタムアダプタを実装します。

public class MyClassAdapter extends ArrayAdapter<MyClass> {

    private static class ViewHolder {
        private TextView itemView;
    }

    public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
        super(context, textViewResourceId, items);
    }

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

        if (convertView == null) {
            convertView = LayoutInflater.from(this.getContext())
            .inflate(R.layout.listview_association, parent, false);

            viewHolder = new ViewHolder();
            viewHolder.itemView = (TextView) convertView.findViewById(R.id.ItemView);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        MyClass item = getItem(position);
        if (item!= null) {
            // My layout has only one TextView
                // do whatever you want with your string and long
            viewHolder.itemView.setText(String.format("%s %d", item.reason, item.long_val));
        }

        return convertView;
    }
}

Androidフレームワークにあまり詳しくない方のために、こちらでより詳しく説明しています。 https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView .