Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使用setRetainInstance(布尔值)?_Android_Android Fragments_Android Viewpager_Fragmentpageradapter - Fatal编程技术网

Android 如何使用setRetainInstance(布尔值)?

Android 如何使用setRetainInstance(布尔值)?,android,android-fragments,android-viewpager,fragmentpageradapter,Android,Android Fragments,Android Viewpager,Fragmentpageradapter,假设我有一个片段a。它有一个实例变量mviewpage,该变量指向它的ViewPager 在片段A的onCreate(Bundle)中,我调用setRetainInstance(true) 方向改变时: onCreateView(LayoutFlater、ViewGroup、Bundle)被调用,新视图被膨胀。因此,在新膨胀的视图中有一个新的ViewPager mviewpage在方向改变时指向原始的ViewPager 我的问题是:如何使(1)中新的ViewPager与(2)中保留的mviewp

假设我有一个
片段a
。它有一个实例变量
mviewpage
,该变量指向它的
ViewPager

片段A
onCreate(Bundle)
中,我调用
setRetainInstance(true)

方向改变时:

  • onCreateView(LayoutFlater、ViewGroup、Bundle)
    被调用,新视图被膨胀。因此,在新膨胀的视图中有一个新的
    ViewPager

  • mviewpage
    在方向改变时指向原始的
    ViewPager

  • 我的问题是:如何使(1)中新的
    ViewPager
    与(2)中保留的
    mviewpage
    相关联


    或者我应该只使用
    onSaveInstanceState(Bundle)

    正如@Selvin的注释中提到的,您应该让UI元素重新创建

    您应该知道的一些信息:

    setRetainInstance(true)
    应仅用于非UI片段。我个人的建议是不要首先考虑这一点,除非你没有选择权。 要正确处理重新启动,您的活动 在正常的活动生命周期中恢复其以前的状态 哪一个Android在破坏您的应用程序之前调用onSaveInstanceState() 活动,以便保存有关应用程序状态的数据。你 然后可以在onCreate()或 onRestoreInstanceState()

    使用
    onSaveInstanceState(Bundle)
    是正确的,一般来说,您应该使用来保存您的状态。请注意,它是您保存的状态,而不是UI或整个片段

    例如,状态可以是按钮被单击次数的计数。 查看下面关于如何保存状态的链接

    此外,一些UI状态,例如EditText中输入的文本已经在系统API中处理。因此,您只需要处理自己维护的状态

    编辑:


    如果您是新手,不知道需要保存什么和不需要保存什么,只需先跳过它,然后在不使用
    onSaveInstanceState
    的情况下进行方向更改。然后,您很快就会发现在这个过程中丢失了什么,这将是您需要保持的状态。

    UI元素应该重新创建。。。您可以保留数据。。。所以第一个问题是:你不能。。。第二个问题:为什么?我问第二个问题是因为如果第一个问题的答案是你建议的,那么我想我需要另一种方法来恢复
    ViewPager
    ?你不需要ViewPager。。。保留后无效。。。您只需要从中获取数据。。。这就是为什么我要问你为什么需要viewPager实例(你想用这个实现什么),你的意思是我不需要旧的
    viewPager
    ,我只需要保留数据?对于数据,它是否意味着适配器?或者适配器后面的数据?或者适配器后面的数据?是的,最后我们讨论的是相同的。。。现在fx在
    onPostExecute
    set字段
    List mDataFromWhichViewPagerWasBuild=somedata;buildAdapterForViewPagerAndSet(somedata)。。。现在如果fragment retain,您可以在CreateView
    if(mDataFromWhichViewPagerWasBuild!=null)buildAdapterForViewPagerAndSet(mDataFromWhichViewPagerWasBuild)上签入,否则新的AsynctTaskStartLoading().execute()。。。如果方向更改为“setRetainInstance(true)应仅用于非UI片段”,则类似这样的内容不会加载数据fx,这非常有用。你救了我两次!