====== データセットの操作 ======
===== 概要 =====
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に関して]]へ戻る。