0

我有两个片段 FragmentA 和 FragmentB。从片段 A 我通过将自定义对象作为参数传递给片段 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
        }

现在,每当我旋转屏幕时,自定义对象总是空的。

注意 这里我只是更新 Fragment B 的视图。对象作为参数从 Fragment A 传递到 Fragment B 的方法 updateViews。此外,我不期待为自定义对象定义静态。

4

1 回答 1

2

您可以做两件事 1. 将自定义对象存储在每次更改方向时都不会创建的某个位置,即应用程序类、服务等。 2. 将该对象存储在 Bundle 中,作为 OnSaveInstanceState() 中的参数并使用该 Bundle在 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上与此主题相关的其他一些类似主题是

类似的例子

另一个很好的例子

您可以在 Android Documentations for Fragments中获得类似的示例。

于 2013-03-07T12:18:54.480 回答