ユーザーがボタンを押すとリストビューを更新するリストビューを備えたAndroidアプリがあります。アプリには2つのアクションバータブがあります。タブを切り替えたり、画面を回転したり、戻るを押してアクティビティを終了したりすると、リストビューのすべてのデータが消えます。データを残す必要があります。少なくとも向きを変えることで、onSaveInstanceState()にデータを保存できることを私は知っています。したがって、String []をsavedInstanceStateに保存し、onCreateView()でString[]を取得します。これは正常に機能しているようで、データを正しく読み取ります。次に、リストビューを更新しようとします。これもデータを読み取って正しく機能しているようです。リストビューのみが更新されず、代わりに空白のままになります。このための私のコードは次のとおりです。
if (savedInstanceState != null) {
lvArray = savedInstanceState.getStringArray("lvArray");
setupListView();
} else {
lvArray= new String[LISTVIEW_LIMIT];
for (int i = 0; i < LISTVIEW_LIMIT; i++) {
lvArray[i] = " ";
}
setupListView();
}
private void setupListView() {
if (listview.getAdapter() == null) {
ArrayAdapter<String> listviewAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, lvArray);
listview.setAdapter(listviewAdapter);
}
registerForContextMenu(listview);
}
先ほど言ったように、これを実行して、データを適切に読み取り、データのArrayAdapterをセットアップし、リストビューのアダプターを設定します。それはすべて機能しているように見えますが、実際には更新されていません。私はすべてのデータがそこにあることを知っていますが、それでも機能していませんか?
また、リストビューをさまざまなサイズに設定することもできます(LISTVIEW_LIMITによって)。これは、リストビューにすでにあるすべてのデータも削除することを除いて、正常に機能します。制限が変更されたときに配列を再作成する代わりに、データを保持するにはどうすればよいですか?
そして、これをonPause()またはonStop()に保存して、戻るボタンを押したりタブを切り替えたりしてもリストビューを表示し続けることができるようにするための最良の方法は何でしょうか。
編集:notifyDataSetChanged()を使用するように変更されましたが、まだ機能していません:
lvStopwatch = (ListView) view.findViewById(R.id.list_stopwatch);
stopwatchTimes = new String[TOTAL_TIMES];
for (int i = 0; i < TOTAL_TIMES; i++) {
stopwatchTimes[i] = " ";
}
setupListView();
if (savedInstanceState != null) {
stopwatchRunning = savedInstanceState.getBoolean("stopwatchRunning", false);
stopwatchTimes = savedInstanceState.getStringArray("stopwatchTimes");
stopwatchAdapter.notifyDataSetChanged();
} else {
stopwatchRunning = prefs.getBoolean("stopwatchRunning", false);
Log.d("savedPASS", String.valueOf(stopwatchRunning));
}
private void setupListView() {
if (lvStopwatch.getAdapter() == null) {
stopwatchAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, stopwatchTimes);
lvStopwatch.setAdapter(stopwatchAdapter);
}
registerForContextMenu(lvStopwatch);
}