ArrayAdapter#notifyDataSetChangedのソースコードを見たことありますか??
/**
* {@inheritDoc}
*/
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
mNotifyOnChange = true;
}
{@inheritDoc}となっているのでBaseAdapterのJavaDocを見てみる。
/**
* Notifies the attached observers that the underlying data has been changed
* and any View reflecting the data set should refresh itself.
*/
データ変更をオブザーバに通知してViewに反映するメソッドですよね。ご存知の通り。
でも僕の疑問はなぜ、
mNotifyOnChange = true;
があるのかということなんですよねー。
notifyDataSetChangedを呼ぶとフラグがtrueにされてしまう。そのフラグはsetNotifyOnChangeというメソッドで操作できる。
Control whether methods that change the list (
add(T), insert(T, int), remove(T), clear()) automatically call notifyDataSetChanged().個人的に複数のデータを仕方なくfor文で登録しようとすると
1. setNotifyOnChange(false)
2. for文内でaddやinsertを複数回行う
3. setNotifyOnChange(true)
4. notifyDataSetChanged
というイメージで実装するのかなと思っていたのに。。いや、これで正しいとは思うんですが、notifyDataSetChangedを一度呼び出してしまうとfalseになっていたものがtrueになってしまうので注意が必要だというお話でした。
なぜこのようになっているのか疑問。。。誰か教えてください。。。

