切换视图后维护视图状态?

时间:2011-10-10 19:33:36

标签: android view state

我有一个Android应用,它有2个视图,偶尔会使用setContentView(R.layout.viewname);

在它们之间切换

然而,当我切换回上一个视图时,它似乎从我离开时失去了所有状态。即EditTexts忘记了它们的内容,按钮忘记了它们是启用还是禁用等等。

我该怎么做才能防止这种情况发生?

2 个答案:

答案 0 :(得分:4)

这不是Android中两个“视图”之间切换的推荐方式。

通常,您只需在setContentView()中调用Activity.onCreate()一次,指定包含您希望使用的所有视图的布局(当然,您可以向任何{{{}}添加Views {1}}在您的布局中,稍后)。引用Activity的文档:

  

onCreate(Bundle)是初始化活动的地方。最重要的是,在这里,您通常会使用定义UI的布局资源调用setContentView(int),并使用findViewById(int)检索该UI中需要以编程方式进行交互的窗口小部件。

您可以通过多种方式解决此问题,具体取决于您的特定应用要求以及“视图”的含义。以下是一些:

  1. 将您的视图放在单独的布局中,并将它们作为两个单独活动的内容视图。当您切换回上一个视图时,默认情况下,字段中的数据将自行保存(无法继续使用!)。

  2. 将所有视图放在一个Activity的一个布局中。使用View.setVisibility(...)切换您希望在屏幕上显示和隐藏的视图。隐藏的视图将保持其状态。

  3. 对每组视图使用ViewGroups(如果您的目标是针对Honeycomb / 3.0之前的应用,则需要Android compatibility library)。您可以通过Fragment启动Fragment来添加或删除FragmentTransaction。被删除的碎片仍然保持其状态,并且一旦再次添加就会正确恢复。

  4. 如果您有自定义视图,则可以通过实施View.onSaveInstanceState()View.onRestoreInstanceState()来确保其保持状态。 Qberticus提供的answer是一个很好的参考。

答案 1 :(得分:0)

将视图保存到字段,然后加载变量。因此,如果您的第一个内容视图是 framelayout,保存

FrameLayout layout1; //活动变量,将第一个视图保存到它

然后当你再次加载它,而不是从xml加载它时,从变量加载它: 的setContentView(布局1);

这应该保存状态,只要活动在此期间没有被清除。