我有两个片段FragmentA和FragmentB。 从片段A i通过将自定义对象作为参数传递给片段B中的方法来更新片段B中的视图。 例如,下面是片段B:
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
}
现在,每当我旋转屏幕时,自定义对象都是空的。
注意 这里我只是更新Fragement B的视图。该对象作为参数从Fragment A传递给Fragment B的方法updateViews。 另外,我不期待为自定义对象定义静态。
答案 0 :(得分:2)
你可以做两件事 1.将自定义对象存储在每次更改方向时未创建的位置,即应用程序类,服务等。 2.将该对象存储在您在OnSaveInstanceState()中作为参数获取的Bundle中,并使用该Bundle在OnRestoreInstanceState()或OnCreate()中设置Object ...
例如,
@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上的其他类似线程是
您可以在Android文档中为Fragments获得类似的示例。