滑动 ViewPager 时如何清除片段相关状态

Posted

技术标签:

【中文标题】滑动 ViewPager 时如何清除片段相关状态【英文标题】:How to clear fragment-related status when swiping ViewPager 【发布时间】:2012-11-16 09:15:19 【问题描述】:

在我的 android 应用程序中,我使用 ViewPager 和 Action Bar 来布局主要活动。这 PagerAdapter 是 FragmentStatePagerAdapter。

我的第一个片段包含一个启用了批处理上下文操作的 ListView。当 CAB 在屏幕上时,我滑动到下一个片段,它仍然处于打开状态。实际上,它保存在所有片段中。刷卡的时候怎么去掉?

滑动时可能会保持其他状态。怎样才能全部删除?

【问题讨论】:

【参考方案1】:
    让你的活动实现ViewPager.OnPageChangeListenerViewPagerOnPageChangeListener 设置为活动 在您覆盖的 onPageSelected(int position) 方法中,关闭您的 CAB

【讨论】:

我已经编写了这段代码并且它可以工作。 <@Override public void onPageSelected(int position) if(mLastPositon >= 0 && mLastPositon != position && mTabs.get(mLastPositon).fragment instanceof BaseViewPagerFragment) ((BaseViewPagerFragment)mTabs.get(mLastPositon).fragment).clear(); mActionBar.setSelectedNavigationItem(position); >我用clear方法关闭了CAB,但是我刷回来怎么恢复CAB呢? 好吧,当所选页面不是BaseViewPagerFragment 的实例时,您已经有了关闭CAB 的逻辑,对吗?在你的 if 中添加一个 else 并实现一个方法,当所选页面是 BaseViewPagerFragment 的实例时返回 CAB 我不知道如何显示 CAB。我只是在 onCreateView 回调中的列表视图上尝试了 setItemChecked 方法,但它只是在我第一次加载我的片段时使项目被选中(CAB 未显示)。我的Code是mTaskView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); mTaskView.setMultiChoiceModeListener(onTaskLongClickListener); mTaskView.setItemChecked(0, true);我大致看了setItemChecked源码if (value && mChoiceMode == CHOICE_MODE_MULTIPLE_MODAL && mChoiceActionMode == null) mChoiceActionMode = startActionMode(mMultiChoiceModeCallback); 我认为应该调用 startActionMode 方法。我错过了什么或有什么不对吗? 我刚刚尝试将 setItemChecked 方法移动到 onStart 回调并且它有效。我不知道原因。

以上是关于滑动 ViewPager 时如何清除片段相关状态的主要内容,如果未能解决你的问题,请参考以下文章

如何在 viewpager 中显示 2 个片段

滑动时 ViewPager 更新片段

使用 ViewPager 滑动时,片段没有调用 OnResume()

我的片段中有 webview,当滑动 webview 时, viewPager 也开始滑动

Viewpager 不清除片段

在 ViewPager 中滑动方向