1

ユーザーがボタンを押すとリストビューを更新するリストビューを備えた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);
   }
4

3 に答える 3

0

これを試して

adapter.notifyDataSetChanged();
于 2012-09-27T03:48:38.783 に答える
0

解決策を見つけました。onCreateView() メソッドで値を復元すると、何らかの理由で値が正しく表示されません。代わりにフラグメントの onCreate() メソッドでそれらを復元しました。saveInstanceState チェックを onCreate() メソッドに移動した以外は、実際にはあまり変更していませんが、現在は機能しています。

于 2012-09-29T22:55:59.397 に答える
0

リストビュー データを何らかのデータ構造に保存します。
私はHashMapsこれに最適です。
データを入力する場合は、Sales アダプターを再度呼び出します。

adapter=new MyAdapter(dataHashMap);
listView.setAdapter(adapter);
于 2012-09-27T04:22:32.467 に答える