LoginSignup
31
36

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-01-31

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);
    }
}
31
36
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
36