【问题标题】:android: Update the ActionBar items depending on each Fragment in a ViewPager?android:根据ViewPager中的每个Fragment更新ActionBar项目?
【发布时间】:2013-02-27 15:20:56
【问题描述】:

我在操作栏中有一个标志/书签按钮,我希望根据 ViewPager 视图中的 Fragment 打开或关闭它。

如果用户在 ViewPager 中标记了一个片段,它将被设置为启用。当用户滑动到下一个时,我希望操作栏按钮更新为未标记。现在,我可以通过两个菜单项来更改按钮的状态,并隐藏一个,单击时显示一个。

这是我的 Activity 中用于切换操作栏按钮的代码:

public boolean onOptionsItemSelected(MenuItem item) {
    int currentItem = mPager.getCurrentItem();
    switch (item.getItemId()) {
    case R.id.menu_flag:
        mFlagged = true;
        supportInvalidateOptionsMenu();
        return true;
    case R.id.menu_unflag:
        mFlagged = false;
        supportInvalidateOptionsMenu();
        return true;
    }
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem item_flag = menu.findItem(R.id.menu_flag);
    MenuItem item_unflag = menu.findItem(R.id.menu_unflag);
    if (mFlagged) {
        //If flagged
        //Show flagged item
        item_flag.setVisible(false).setEnabled(false);
        item_unflag.setVisible(true).setEnabled(true);
        item_flag.isVisible();
    } else {
        //If not flagged
        //Show unflagged icon
        item_flag.setVisible(true).setEnabled(true);
        item_unflag.setVisible(false).setEnabled(false);
    }

    return super.onPrepareOptionsMenu(menu);
}

我遇到的问题是我无法访问菜单项、保存和恢复按钮的状态,即它是否被片段或 FragmentPagerAdapter 标记。

我该怎么做?我应该在哪个级别访问操作栏; Activity、PagerAdapter 还是 Fragments?

【问题讨论】:

  • 你能试着总结一下你的问题吗?据我了解,它是:“我的活动如何知道当前显示的是哪个片段,以便我可以从活动中相应地更改我的 ActionBar”,对吗?
  • @Ascorbin 这是关于如何通过 ViewPager 中的每个片段更改操作栏上的项目

标签: android android-actionbar android-viewpager


【解决方案1】:

在您的ViewPager 上注册ViewPager.OnPageChangeListener 应该可以解决问题。然后,覆盖onPageSelected(int pageNum) 以在页面更改时接收回调。

public void onPageSelected(int pageNum) {
     supportInvalidateOptionsMenu();
}

【讨论】:

  • 太棒了!工作一种享受!由于 OnPageChangeListener 在 PagerAdapter 中,所以不得不做一些诡计,但这个解决方案解决了问题的基础。谢谢!
  • 然后在您的活动的onCreateOptionsMenu(Menu menu) 中检查viewPager.getCurrentItem() 并在适当的项目中添加所需的菜单
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 1970-01-01
  • 2015-10-13
  • 2014-08-11
  • 2019-09-10
相关资源
最近更新 更多