Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 并非ViewPager';s的片段将更新_Android_Android Fragments_Android Viewpager_Togglebutton - Fatal编程技术网

Android 并非ViewPager';s的片段将更新

Android 并非ViewPager';s的片段将更新,android,android-fragments,android-viewpager,togglebutton,Android,Android Fragments,Android Viewpager,Togglebutton,我的ViewPager中有3个片段。 在片段中,我添加了静态切换按钮。(静态,因为我没有找到nullpointerexception的解决方法,如果我想在自定义方法中而不是在onCreateView()中的片段类中使用findViewById()) 在我的MainActivity中的ViewPager外部,我有一个重置按钮,该按钮应将所有切换按钮(在所有3个片段上)重置为“未选中” 每次单击“重置”按钮时,只有当前页面和每个相邻页面都会更新 例如 当前页面:0更新页面:0,1 当前页面:1更新

我的ViewPager中有3个片段。 在片段中,我添加了静态切换按钮。(静态,因为我没有找到nullpointerexception的解决方法,如果我想在自定义方法中而不是在onCreateView()中的片段类中使用findViewById())

在我的MainActivity中的ViewPager外部,我有一个重置按钮,该按钮应将所有切换按钮(在所有3个片段上)重置为“未选中”

每次单击“重置”按钮时,只有当前页面和每个相邻页面都会更新

例如

  • 当前页面:0更新页面:0,1
  • 当前页面:1更新页面:0,1,2
  • 当前页面:2更新页面:1,2
我想问题出在碎纸机上。报告说:

PagerAdapter的实现,它将每个页面表示为一个片段 只要用户 可以返回页面

当我在第2页时,我不能直接返回第0页,因此我认为第0页(=片段0)的视图不再存在于内存中?! 那么,如何访问当前片段中不可见的片段内的切换按钮,或者当前片段的邻居?有解决办法吗?

编辑: 我发现,实际上,我的切换按钮(在所有片段上)的所有checked()-值都得到了更新,但片段的膨胀视图没有更新,这些视图不可见,也不是相邻片段。因此,当我返回到前面的片段时,ToggleButtons的checked()值将重置为上次片段可见时的状态。奇怪

例如:

  • Page2活动-切换按钮\u Page2.checked()=真
  • 切换到第0页
  • 按复位按钮。Toast ToggleButton_Page2.checked()=false
  • 切换回第2页(或已经在第1页)
  • ToggleButton_Page2.checked()=true//应为false
  • 资料来源:

    那么,我怎样才能访问一个不存在的片段中的切换按钮呢 当前片段的邻居也不可见?是 有什么解决办法吗

    你的代码中有很多问题,你应该多读一点关于
    片段
    ,并在
    查看页面中使用它们

    在重置和状态按钮
    OnClickListeners
    listeners中,您编写
    \u adapter.getItem(x)
    试图获取表示该位置页面的
    片段的句柄。这将不起作用,因为简单地调用该方法将返回该位置的
    片段的新实例,而不是实际的
    片段
    所使用的
    ViewPager
    (通过调用
    getItem()
    )。调用
    getItem()
    后获得的新实例未绑定到
    活动
    ,其
    onCreateView
    方法未被调用,因此它没有视图(当您访问它时,您将获得
    NullPointerException
    )。然后,您试图通过将
    ToggelButton
    设置为
    Fragment
    中的静态字段来解决此问题,该字段将在
    ViewPager
    在开始时正确创建
    Fragments
    时初始化。但是您不应该这样做,包含对
    上下文
    引用的静态字段(就像任何
    视图
    一样)是危险的,因为您有泄漏
    上下文
    的风险

    另外,与我上面所说的相关,您不需要将
    上下文
    传递给
    片段
    ,因为与
    活动
    绑定的
    片段
    具有返回对该
    活动
    的引用的
    getActivity()
    方法

    您不应该从
    ViewPager
    访问任何不靠近可见片段的片段(位于可见位置的左/右,除非您不使用
    ViewPager
    setOffscreenPageLimit()
    方法)。
    ViewPager
    有一种机制可以提高性能(就像
    ListView
    一样),因此它只会立即创建所需内容,以便为用户提供平滑的滑动

    我对您的项目做了一些更改。如需更多问题,请在问题中张贴相关代码

    那么,我怎样才能访问一个不存在的片段中的切换按钮呢 当前片段的邻居也不可见?是 有什么解决办法吗

    你的代码中有很多问题,你应该多读一点关于
    片段
    ,并在
    查看页面中使用它们

    在重置和状态按钮
    OnClickListeners
    listeners中,您编写
    \u adapter.getItem(x)
    试图获取表示该位置页面的
    片段的句柄。这将不起作用,因为简单地调用该方法将返回该位置的
    片段的新实例,而不是实际的
    片段
    所使用的
    ViewPager
    (通过调用
    getItem()
    )。调用
    getItem()
    后获得的新实例未绑定到
    活动
    ,其
    onCreateView
    方法未被调用,因此它没有视图(当您访问它时,您将获得
    NullPointerException
    )。然后,您试图通过将
    ToggelButton
    设置为
    Fragment
    中的静态字段来解决此问题,该字段将在
    ViewPager
    在开始时正确创建
    Fragments
    时初始化。但是您不应该这样做,包含对
    上下文
    引用的静态字段(就像任何
    视图
    一样)是危险的,因为您有泄漏
    上下文
    的风险

    另外,与我上面所说的相关,您不需要将
    上下文
    作为
    片段
    传递给
    片段