notifyDataSetChanged()でListViewが更新されない
小ネタですね。ArrayAdapterを使っている場合に起こる。
その原因はこれ。
ArrayAdapterは、Class Referenceにあるように一度保持したリストに対して、add()、clear()、remove()などのメソッドで操作するアダプタクラスになります。
更新したい場合はコンストラクタで入れ込んリストを代入するだけじゃダメで、clear()してaddしないとArrayAdapterに対してリストのアイテムの更新が伝搬されないって話。
//アダプタ登録 List<String> data_list = new ArrayList<String>(); //MyArrayAdapterはArrayAdapeterのサブクラス MyArrayAdapter adapter = new MyArrayAdapter( this.getActivity(), 0, data_list); ListView listView = (ListView)view.findViewById(R.id.testListView); listView.setAdapter(adapter); //これではダメ //ArrayAdapter内でPrivateなプロパティで持ってるため、伝搬されない data_list = updateBySomeReason(); adapter.notifyDataSetChanged() //これで更新される adapter.clear(); adapter.addAll(updateBySomeReason); adapter.notifyDataSetChanged()