我有一个Android应用,它有2个视图,偶尔会使用setContentView(R.layout.viewname);
然而,当我切换回上一个视图时,它似乎从我离开时失去了所有状态。即EditTexts忘记了它们的内容,按钮忘记了它们是启用还是禁用等等。
我该怎么做才能防止这种情况发生?
答案 0 :(得分:4)
这不是Android中两个“视图”之间切换的推荐方式。
通常,您只需在setContentView()
中调用Activity.onCreate()
一次,指定包含您希望使用的所有视图的布局(当然,您可以向任何{{{}}添加Views
{1}}在您的布局中,稍后)。引用Activity的文档:
onCreate(Bundle)是初始化活动的地方。最重要的是,在这里,您通常会使用定义UI的布局资源调用setContentView(int),并使用findViewById(int)检索该UI中需要以编程方式进行交互的窗口小部件。
您可以通过多种方式解决此问题,具体取决于您的特定应用要求以及“视图”的含义。以下是一些:
将您的视图放在单独的布局中,并将它们作为两个单独活动的内容视图。当您切换回上一个视图时,默认情况下,字段中的数据将自行保存(无法继续使用!)。
将所有视图放在一个Activity的一个布局中。使用View.setVisibility(...)切换您希望在屏幕上显示和隐藏的视图。隐藏的视图将保持其状态。
对每组视图使用ViewGroups
(如果您的目标是针对Honeycomb / 3.0之前的应用,则需要Android compatibility library)。您可以通过Fragment
启动Fragment
来添加或删除FragmentTransaction
。被删除的碎片仍然保持其状态,并且一旦再次添加就会正确恢复。
如果您有自定义视图,则可以通过实施View.onSaveInstanceState()和View.onRestoreInstanceState()来确保其保持状态。 Qberticus提供的answer是一个很好的参考。
答案 1 :(得分:0)
将视图保存到字段,然后加载变量。因此,如果您的第一个内容视图是 framelayout,保存
FrameLayout layout1; //活动变量,将第一个视图保存到它
然后当你再次加载它,而不是从xml加载它时,从变量加载它: 的setContentView(布局1);
这应该保存状态,只要活动在此期间没有被清除。