android:根据ViewPager中的每个片段更新ActionBar项目?

时间:2013-02-27 15:20:56

标签: android android-actionbar android-viewpager

我在Action Bar中有一个标记/书签按钮,我希望根据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标记它。

我该怎么做?我应该访问Action Bar的哪个级别; Activity,PagerAdapter还是Fragments?

1 个答案:

答案 0 :(得分:22)

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

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