2013-03-07 30 views
0

我有两个片段FragmentA和FragmentB。保存和恢复片段中的自定义对象

public class FragmentB extends Fragment { 

private ArrayList<String> customObj = new ArrayList<String>(); 

     public void updateViews(ArrayList<String> obj) { 
       customObj = obj; 

     } 

    @Override 
     public void onSaveInstanceState(Bundle outState) { 
     System.out.println("Custom Object : "+customObj);//custom object is always empty 
     } 

现在,每当我旋转屏幕,自定义: 从片段A i。由传递自定义对象作为参数的方法在片段B 例如下面是片段B更新片段B浏览对象是al;方法是空的。

注意 在这里,我只是更新Fragement B.意见的对象从片段A到片段B 同样的方法更新视图参数传递,我并不期待定义静态定制目的。

回答

1

你可以做两件事情 1.存储该自定义对象的地方未建立每次方向改变时,即应用程序类,服务等 2.存储捆绑包内的对象,你得到尽可能的onSaveInstanceState里面的参数()和使用捆绑设置在OnRestoreInstanceState(),或在OnCreate()的对象...

例如,

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Logger.d("Dash onCreate"); 
    super.onCreate(savedInstanceState); 

    ... 
    // create fragments to use 
    if (savedInstanceState != null) { 
     //get your Object 
    } 
    if (yourObject != null) 
     //restore the View using yourObject 
    ... 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
} 

现在您的自定义类,你将不得不要么实现Serializable或Parcelable为将其存储在Bundle中。序列化很简单,但如果您实施Parcellable,则可以对其进行更多控制。

上SO相关的一些其他类似的线程这个话题是

Similar Example

Another good example

你可以得到一个类似的例子在Android的文件以了解Fragments