1

私のアプリでは、onSaveInstanceState の putSerializable メソッドで ArrayList の状態を保存しようとしています。そして、onCreate と onRestoreInstanceState で復元します。私のアプリでは、このオブジェクトのインスタンスが保存されていない場合、インターネット データから作成されます。しかし、このソリューションをテストしようとするたびに、ArrayList はネットワークからのダウンロードを開始します。誰でも私を助けることができますか?

public class Activity extends SherlockActivity {

ListView listView;
SlidingMenu slidingMenu;
ArrayList<HashMap<String, String>> newsList = null;
String url = "/////here_my_url////";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setTitle(R.string.news_vatican);
    listView = (ListView) findViewById(R.id.newslist);

    slidingMenu = new SlidingMenu(this);
    slidingMenu.setMode(SlidingMenu.LEFT);
    slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    slidingMenu.setFadeDegree(0.35f);
    slidingMenu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    slidingMenu.setMenu(R.layout.slidingmenu);
    slidingMenu.setBehindOffset(150);

    if (savedInstanceState != null){
        newsList = (ArrayList<HashMap<String, String>>) savedInstanceState.getSerializable("list");
        Log.e("Activity", "RESTORING");
    } else {
        Log.e("Activity", "PARSING NEW");
        JSONParser parser = new JSONParser(this);
        parser.execute(url);
        try {
            newsList = parser.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
            Log.e("Activity", "Failed to get newslist");
        } catch (ExecutionException e) {
            e.printStackTrace();
            Log.e("Activity", "Failed to get newslist");

        }

    }


    listView.setAdapter(new NewsAdapter(getApplicationContext(), newsList));

}

@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putSerializable("list", newsList);
    super.onSaveInstanceState(savedInstanceState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

        newsList = (ArrayList<HashMap<String, String>>) savedInstanceState.getSerializable("list");

}
4

1 に答える 1

0

リストが大きすぎない場合、簡単なオプションの 1 つは共有設定に保存することです。ただし、格納できるのは文字列のみであるため、ArrayList をシリアル化する必要があります。

あなたはあなたの中でこのようなことを試すことができますonSaveInstanceState()...

  1. SharedPreferences エディターを入手する
    SharedPreferences.Editor editor = getSharedPreferences("shared_preferences", 0).edit();
  2. あなたの価値を追加
    editor.putString("myList", serialize(myList));
  3. 変更をコミットする
    editor.commit()

その後onCreate()、アクティビティが実行によって強制終了された場合でも、メソッド内など、どこからでもこのリストにアクセスできます。

SharedPreferences preferences = getSharedPreferences("shared_preferences",0);
ArrayList<HashMap<String,String>> newsList = deserialize(preferences.getString("newsList", "");

繰り返しますが、これには ArrayList をシリアライズおよびデシリアライズするためのメソッドを作成するという追加の作業が必要になりますが、永続化する必要があるデータがこれだけである場合は、確かに簡単なオプションです。

于 2013-08-23T22:47:38.080 に答える