9

在我的应用程序中,我想将数据保存在savedInstanceState(). 我想保存ArrayList<HashMap<String,String>>。到目前为止,我无法做到这一点。这是困扰我的代码

@Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putParcelableArrayList("places", (ArrayList<? extends Parcelable>) places);

    }

恢复()方法

private void restore(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        //What should i do here! i have try many things but none of them is helping

    }
4

2 回答 2

27

因为ArrayList,HashMap并且StringSerializable你可以使用Bundle.putSerializableandBundle.getSerializable

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putSerializable("places", places);
}

private void restore(Bundle savedInstanceState) {
    if (savedInstanceState != null) {
        places = (ArrayList<HashMap<String,String>>) savedInstanceState.getSerializable("places"); 
    }
}

另外,请确保您是restoreonRestoreInstanceStateonCreate

于 2013-02-17T18:03:04.740 回答
0

假设你有:

    ArrayList< HashMap< String,String>> arr = new ArrayList< HashMap< String,String>> ();

    @Override
    protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putParcelableArrayList("places", (ArrayList<    ? extends Parcelable>) arr);
    }

   @Override
   protected void onRestoreInstanceState(Bundle savedInstanceState) {

   ArrayList<HashMap<String,String>> a = (ArrayList<HashMap<String,String>>)savedInstanceState.get("places");
   /*for(int i =0; i< a.size(); i++){
        HashMap<String,String> map = a.get(i);
        for(String s : map.keySet()){
            Log.d("log",s+" :: "+map.get(s));
        }
    }*/
}
于 2013-02-17T18:41:20.517 回答