Android 切换视图后是否保持视图状态?

Android 切换视图后是否保持视图状态?,android,view,state,Android,View,State,我有一个android应用程序,有两个视图,它偶尔会使用setContentView(R.layout.viewname)在它们之间切换 然而,当我切换回上一个视图时,它似乎已经失去了我离开它时的所有状态。即编辑文本忘记其内容,按钮忘记是否启用或禁用等 我能做些什么来防止这种情况?在Android中,这不是在两个“视图”之间切换的推荐方式 通常,在活动.onCreate()中只调用一次setContentView(),指定一个包含您希望使用的所有视图的布局(当然,您可以稍后将更多视图添加到布局中

我有一个android应用程序,有两个视图,它偶尔会使用
setContentView(R.layout.viewname)在它们之间切换

然而,当我切换回上一个视图时,它似乎已经失去了我离开它时的所有状态。即编辑文本忘记其内容,按钮忘记是否启用或禁用等


我能做些什么来防止这种情况?

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

通常,在
活动.onCreate()
中只调用一次
setContentView()
,指定一个包含您希望使用的所有视图的布局(当然,您可以稍后将更多
视图添加到布局中的任何
视图组
)。要引用以下文档:

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

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

  • 将视图放在单独的布局中,并使其成为两个单独活动的内容视图。默认情况下,当您切换回上一个视图时,字段中的数据将自动保存(向前不起作用!)

  • 将所有视图放在单个活动的一个布局中。用于切换要显示在屏幕上的视图的显示和隐藏。隐藏的视图将保持其状态

  • 为每组视图使用一个
    片段
    (如果您针对的是pre-Honeycomb/3.0应用程序,则需要)。通过使用
    FragmentManager
    启动
    FragmentTransaction
    ,可以添加或删除
    片段。被删除的片段仍保持其状态,并将在再次添加时正确恢复


  • 如果您有一个自定义视图,您可以通过实现和确保它保持其状态。Qberticus提供的是一个很好的参考。

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

    通常,在
    活动.onCreate()
    中只调用一次
    setContentView()
    ,指定一个包含您希望使用的所有视图的布局(当然,您可以稍后将更多
    视图添加到布局中的任何
    视图组
    )。要引用以下文档:

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

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

  • 将视图放在单独的布局中,并使其成为两个单独活动的内容视图。默认情况下,当您切换回上一个视图时,字段中的数据将自动保存(向前不起作用!)

  • 将所有视图放在单个活动的一个布局中。用于切换要显示在屏幕上的视图的显示和隐藏。隐藏的视图将保持其状态

  • 为每组视图使用一个
    片段
    (如果您针对的是pre-Honeycomb/3.0应用程序,则需要)。通过使用
    FragmentManager
    启动
    FragmentTransaction
    ,可以添加或删除
    片段。被删除的片段仍保持其状态,并将在再次添加时正确恢复


  • 如果您有一个自定义视图,您可以通过实现和确保它保持其状态。Qberticus提供的是一个很好的参考。

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

    框架布局1//活动变量,将第一个视图保存到它

    然后,当您再次加载它时,不要从xml加载它,而是从变量加载它: setContentview(布局1)


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

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

    框架布局1//活动变量,将第一个视图保存到它

    然后,当您再次加载它时,不要从xml加载它,而是从变量加载它: setContentview(布局1)


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

    将两个视图放在同一布局中,并打开和关闭可见性如何。除了状态将被保存外,它将给您相同的效果。将两个视图放置在同一布局中,并打开和关闭可见性如何。它将给你同样的效果,除了状态将被保存。