Android 并非ViewPager';s的片段将更新
我的ViewPager中有3个片段。 在片段中,我添加了静态切换按钮。(静态,因为我没有找到nullpointerexception的解决方法,如果我想在自定义方法中而不是在onCreateView()中的片段类中使用findViewById()) 在我的MainActivity中的ViewPager外部,我有一个重置按钮,该按钮应将所有切换按钮(在所有3个片段上)重置为“未选中” 每次单击“重置”按钮时,只有当前页面和每个相邻页面都会更新 例如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更新
- 当前页面:0更新页面:0,1
- 当前页面:1更新页面:0,1,2
- 当前页面:2更新页面:1,2
片段
,并在查看页面中使用它们
在重置和状态按钮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
时初始化。但是您不应该这样做,包含对上下文
引用的静态字段(就像任何视图
一样)是危险的,因为您有泄漏上下文
的风险
另外,与我上面所说的相关,您不需要将上下文
作为片段
传递给片段