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