2013-02-17 50 views
6

trong ứng dụng của tôi, tôi muốn lưu dữ liệu tại savedInstanceState(). tôi muốn lưu ArrayList<HashMap<String,String>>. Và cho đến nay tôi không thể làm điều đó. đây là mã của tôi mà làm phiền tôiLưu ArrayList of Hash map

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

    } 

khôi phục phương pháp()

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 

    } 

Trả lời

24

Kể từ ArrayList, HashMapString được Serializable bạn có thể sử dụng Bundle.putSerializableBundle.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"); 
    } 
} 

Ngoài ra, đảm bảo bạn đang gọi restore fr om onRestoreInstanceState hoặc onCreate

+1

ohh Vâng cám ơn. nó Đã hoạt động –

+0

Cảm ơn tôi! Ngoài ra chỉ cần thêm nếu bạn sử dụng onRestoreInstanceState bạn không phải làm kiểm tra null. http://developer.android.com/training/basics/activity-lifecycle/recreating.html – piratemurray

0

phép nói u có:

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)); 
     } 
    }*/ 
}