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

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

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

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

【问题讨论】:

    标签: android android-viewpager contextual-action-bar


    【解决方案1】:
    1. 让你的活动实现ViewPager.OnPageChangeListener
    2. ViewPagerOnPageChangeListener 设置为活动
    3. 在您覆盖的 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 回调并且它有效。我不知道原因。
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多