相关疑难解决方法(0)

在方向更改时保存UI - 如果保留Fragment,则onSaveInstanceState无法按预期工作

使用compat lib v1(因为某些错误而不使用v2 | 3); 这个问题的一个变种.

我有一个片段,其UI具有各种控件,我希望在方向更改时保持其状态.

父方活动在方向改变时被销毁(请不要告诉我有关清单变化以避免活动娱乐!!!!).

片段调用setRetainInstance(true).

1)现在我的理解是,具有唯一ID的视图应该保留一些状态,例如方向更改.鉴于此,我期望一个非null的bundle,onCreateView|onActivityCreated但它是null.

2)在任何情况下如果我保存状态onSaveInstanceState(确保我调用super)我仍然在'onCreateView | onActivityCreated'中得到一个空包

3)如果我不调用setRetainInstance(true)那么onCreateView|onActivityCreated即使我没有`onSaveInstanceState'方法,我也会得到一个非空包.

我的问题是,这是否按预期工作,我对生命周期的理解被打破了?无论如何,我猜测对我来说最好的方法是保留片段,然后在片段中保持控件的状态.

提前致谢.彼得.

android android-fragments

18
推荐指数
1
解决办法
1万
查看次数

片段setRetainInstance(true)保存View属性

我对保存位于Android片段内部的View状态的最佳做法感到困惑。

我以为那setRetainInstance(true)可以解决问题。但是,尽管这确实保留了中View声明的旧全局引用Fragment,但在放大布局时将不会使用这些视图。因此,我必须手动将属性从旧的全局View引用转移到膨胀布局中的新View。请参阅下面的代码,了解我的操作方式。

public static class MyFragment extends Fragment {

    // I need to save the state of two views in the fragment
    ProgressBar mProgress;
    TextView mText;


    @Override public void onCreate(Bundle savedInstanceState) {
        // savedInstanceState == null if setRetainInstance == true
        super.onCreate(savedInstanceState);

        // Retain the instance between configuration changes
        setRetainInstance(true);
    }

    @Override public View onCreateView(LayoutInflater i, ViewGroup c, Bundle b) {
        // Inflate xml layout for fragement (orientation dependent)
        View v = i.inflate(R.layout.fragment_main, c, false); …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-view

2
推荐指数
1
解决办法
4110
查看次数

标签 统计

android ×2

android-fragments ×2

android-view ×1