BaseAdapterでnotifyDataSetChanged()が効かない3つの原因と解決策
BaseAdapter が notifyDataSetChanged() を無効にする3つの理由と解決策
- データソースが変更されていない場合、notifyDataSetChanged()はリストを更新しません。データソースが変更されていない場合にこのメソッドを呼び出すことは無意味です。解決策は、notifyDataSetChanged()を呼び出す前にデータソースが変更されていることを確認することです。
- getView()メソッドをオーバーライドする際にsuper.getView()メソッドを呼び出していないと、notifyDataSetChanged()メソッドを呼んでもリストが更新されません。解決策としては、getView()メソッドのオーバーライド先でsuper.getView()メソッドを最初に呼び出します。
- Adapterのメソッド経由でリストに加減算処理を行っていないため:リストの項目追加や項目削除時にAdapterが提供するメソッドを使用せずに、データソースを直接変更した場合、notifyDataSetChanged()は有効になりません。対処法は、リストの項目に変更を加える場合はAdapterのメソッド経由で行い、その後でnotifyDataSetChanged()を呼び出すことです。
BaseAdaperのnotifyDataSetChanged()が無効になる問題の対処法は、データソースが変化していること、親クラスのgetView()メソッドを確実に呼び出していること、アダプタのメソッドを使用してデータの追加や削除を行っていることを確認することです。