ユーザ用ツール

サイト用ツール


データセットの操作

データセットの操作

概要

ListViewやGalleryなどのウィジェットは、リストをデータセットとして保持する。データセットの操作は、リストそのもの、或いは、Adapterを経由して行われる。

Adapter経由での操作

最も一般的なのは、Adapterを経由して操作することである。 add(), insert(), remove()などの一般的な操作は揃っている。

操作は、即座にViewに反映されるが、故に、UIスレッド以外から行うと例外が起こる。

UIスレッド以外から呼び出す場合はHandler経由になるが、順序保証もないため、連続してデータをadd()する場合などに問題があるかも知れない。

そのような場合には、Listを直接操作することになる。

Listそのものの操作

Listそのものを操作することで、データセットを変更することは可能である。 しかし、変更が即座に Viewに反映されることはない。

逆に言えば、UIスレッド以外から操作を行う場合、或いは、大量のデータを追加や削除する場合に向いている。 Handlerを経由するわけでもないので、データセットの操作順序は保証される。

ただし、UIスレッド側で、何らかの操作-リストをスクロールするなど-が入ると、一貫性が破綻し、IllegalStateExceptionを発生することがある。UI側からの操作を禁止するにはsetVisibility(View.GONE)するなどする必要があろう。(freeze/thawのような操作はAndroidにはないようである。)

データセットの操作をView に反映させるには、notifyDatasetChanged()を呼び出す必要がある。

adapter.notifyDatasetChanged();

この操作は、UIスレッドで行われる必要がある。 従って、

handler.post(new Runnable(){
    public void run() {
        adapter.notifyDatasetChanged();
    }
});

のように、必要に応じて、Handlerを経由する。

Androidに関してへ戻る。

データセットの操作.txt · 最終更新: 2015/04/10 17:27 by 127.0.0.1