Android - 如何知道何时关闭特定布局

时间:2013-03-31 16:39:07

标签: java android layout

因此,我的一个android片段(主细节设置中的细节片段)有几种可能的布局,具体取决于用户想要做什么,其中一个布局包含大约十几个EditText字段供用户输入数据

如果用户输入数据,然后切换到另一个布局或另一个片段(从细节到主片段),我想在执行切换之前保存他们输入的内容,而不需要用户做任何事情。因此,我需要知道特定布局ID何时被充气,然后被放气/销毁/覆盖等等。

我该怎么做? onCreateView(),我正在给新布局充气,似乎不够,因为它似乎没有提供一种方法来访问之前的内容,如果用户切换到主片段,也不会调用AFAIK。 getActivity().getCurrentFocus()开头的onCreateView()会返回一个视图,但与R.layout.my_layout相比,getID()似乎不匹配,并且在布局中的元素上调用getActivity().getCurrentFocus().findViewByID() != null也不起作用。

另外,我什么时候进行保存?

编辑:我应该覆盖onDestroyView()并在那里运行保存代码吗?每当我尝试这样做时,应用程序崩溃。

1 个答案:

答案 0 :(得分:0)

基于Fragments布局ID保存和恢复临时数据,我想是非常反模式的。

相反,将输入数据作为名称 - 值对添加到“实例状态”Bundle,覆盖片段的onSaveInstanceState(Bundle savedInstanceState)

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
  super.onSaveInstanceState(savedInstanceState);
  savedInstanceState.putBoolean("myCheckboxState", myCheckBox.isChecked());
  savedInstanceState.putDouble("myDouble", 1.9);
  savedInstanceState.putInt("myInt", 1);
  savedInstanceState.putString("myTextViewString", myTextView.getText());
  // etc.
}

(改编自this answer

将Fragment再次添加到容器后,可以在各种生命周期方法中访问此Bundle。例如,通过覆盖onActivityCreated(Bundle savedInstanceState)方法,您可以访问此Bundle并使用相应的setter方法预填表单输入。

根据您的持久性要求,您还可以更全面地存储数据,而不仅仅是存储在Fragments实例状态中。

相关问题