ユーザ用ツール

データセットの操作

概要

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に関してへ戻る。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information