当前位置: 首页 > 知识库问答 >
问题:

自动保存和恢复编辑文本状态的片断

许亦
2023-03-14

我有一个片断,似乎是自动恢复状态的屏幕旋转配置更改。我可以在日志中验证每当屏幕旋转时在片段中调用onCreatView。尽管向下调用applyDefaults(),但当屏幕旋转并调用onCreateView()时,用户创建的草稿条目将被保留。

我的理解是,我必须在onSaveInstanceState()中保存状态,并在onCreateView()中恢复状态,但情况似乎并非如此。有人能解释一下吗?

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    Log.d(TAG, "onCreateView()");
    View view = inflater.inflate(R.layout.fragment_email_entry, container, false);

    m_hostNameEditText = (EditText) view.findViewById(R.id.hostNameEditText);
    // set reference for other fields

    applyDefaultsForNewEmailAccount();
    return view;
}

private void applyDefaults() {
    m_hostNameEditText.setText("");
    // set other defaults
}

这可能与我的活动继承自SingleFragmentActivity,因此它可能看到片段已经在视图中有关。不过,我们知道Fragment.onCreateView()正在被调用。

public abstract class SingleFragmentActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_fragment_activity);
        FragmentManager fragmentManager = getFragmentManager();
        Fragment fragment = fragmentManager.findFragmentById(R.id.single_frame_container);
        if (fragment == null) {
            fragment = createFragment();
            fragmentManager.beginTransaction()
                    .add(R.id.single_frame_container, fragment)
                    .commit();
        }
    }

    public abstract Fragment createFragment();
}

共有1个答案

汪天宇
2023-03-14

就像一个活动一样,片断会自动按照视图组件的ID保存包中任何片断视图组件的数据。与本练习一样,如果您实现了onSaveInstanceState()方法,请确保添加对super.onSaveInstanceState()方法的调用,以保留视图数据的自动保存特性。

来源

 类似资料:
  • 我试图理解使用片段保存和恢复状态的过程。我用它创建了滑动导航菜单。 其中一个片段中有以下代码: 例如,我想在用户退出片段之前保存复选框的状态,并在再次创建片段时恢复它。如何实现这一点? 编辑: 根据raxellson的回答,我将片段更改为: 我已被记录,因此未保存savedInstanceState。我做错了什么?

  • 我搜索了很多信息,但没有一个明确的。有人能给出一个明确的解决方案和一个例子吗?

  • 在绘画的时候,经常会有这种情况,本来正在用绿色笔画,突然需要用红色笔画几笔,但画完了之后又要换成绿色笔。如果是在现实中作画,可以把笔蘸上不同的墨水,画了之后又蘸上之前的墨水,或者准备几只笔,要用哪只就选哪只。 在Canvas中也可以这样,不过Canvas中的画笔永远只有一只。所以,如果要更换画笔的颜色,就需要保存和恢复状态。状态其实就是画布当前属性的一个快照,包括: 图形的属性值,如strokeS

  • 状态的保存与恢复 操作流程 为了状态的保存与恢复,我们可以先用栈上的一小段空间来把需要保存的全部通用寄存器和 CSR 寄存器保存在栈上,保存完之后在跳转到 Rust 编写的中断处理函数;而对于恢复,则直接把备份在栈上的内容写回寄存器。由于涉及到了寄存器级别的操作,我们需要用汇编来实现。 而对于如何保存在栈上,我们可以直接令 sp 栈寄存器直接减去相应需要开辟的大小,然后依次放在栈上。需要注意的是,

  • 我有一个ViewPager有3个碎片绑定在FragmentPagerAdapter在一个FragmentActivity中,当我切换到不同的应用程序,回到我的应用程序后,或者在一个输入调用后,碎片没有恢复到以前的状态,一个碎片完全消失了,一些碎片按钮点击不工作..但在模拟器中它的工作很好 帮帮我吧...

  • 我创建了一个全新的项目来展示我的问题。基本上,我的片段有两个。在使用CreateView时,我总是使用。但是,如果我检查,然后通过按后退按钮向外导航,下次打开它时,它会自动检查。那种行为打破了我的逻辑。 MainActivity.java weirdfragment.java 因此,我可以看到它是onRestoreInstanceState检查我的。但我不知道如何预防。我正在考虑的事情: 在OnV