Help us understand the problem. What is going on with this article?

ListViewのカスタムViewを作る時、Adapterの更新は、更新用メソッドを作った方がいいと思う

More than 3 years have passed since last update.

ListViewを継承したカスタムビューを作る事って結構多いと思うんだけど、私はこうしているというメモ。
なぜかListViewを更新するたびにAdapterを再生成してるサンプルとかあって混乱したので。

特徴としては、アダプタに更新用のメソッドを作って、カスタムビューにも更新用メソッドを用意しておく。
他のViewの操作と連動してListViewを更新する場合、アダプタの更新内容を与えるだけで更新できる。

思い切ってAdapterやListの生成時には中身を作らなくてもいいような気がする。その方が更新処理を一箇所にまとめられてわかりやすくなる気がする。

あ、SwipeRefreshLayout を継承してるけど、他のListView系のクラスでも同様だと思う。

ListViewのソース。

java
public class HogHogeListView extends SwipeRefreshLayout {
    /**
     * @param context
     * @param attrs
     */
    public HogHogeListView(Context context, AttributeSet attrs) {
        super(context, attrs);

        // リストを作る
        listView = new ListView(context);
        listView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        //アダプタを作ってListViewに入れる
        HogeAdapter adapter = new HogeAdapter(activity,hogeList);
        listView.setAdapter(adapter);
        // リストを追加
        addView(listView);//ListViewのインスタンスを格納する事で、レイアウトの「@android:id/list」に自動的に割り当てられます
        setOnRefreshListener(onRefreshListener);//ひっぱった時のリスナ登録
    }

    /**
     * リストビューの更新処理。
     */
    public void reflesh(){
        HogeAdapteradapter = (HogeAdapter)listView.getAdapter();
        adapter.refleshItemList(hogeItemList);
        adapter.getFilter().filter(s);//フィルタ実行。ソートもここで実行する。再描画も担当する

    }
}

次。アダプタのソース。更新用のメソッドを作っておくこと。

java
public class HogeAdapter extends ArrayAdapter<HogeItem>
    public HogeAdapter (Context context, List<HogeItem> list)
    {
        super(context,R.layout.hoge_list_item);
        this.context = context;
        this.sourceList = new ArrayList<HogeItem>(list);
    }
    ~ 描画処理とか基本的なのは省略 ~
    /**
     * ファイルのリストをリフレッシュする
     * @param itemList
     */
    public void refleshItemList(List<HogeItem> itemList){
        sourceList.clear();
        sourceList = new ArrayList<HogeItem>(itemList);
    }
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away