17

アクションバーにフラグ/ブックマークボタンがあり、ViewPagerに表示されているフラグメントに応じてオンとオフを切り替えることができます。

ユーザーがViewPagerでフラグメントにフラグを立てると、有効に設定されます。ユーザーが次のボタンにスワイプすると、アクションバーのボタンがフラグなしに更新されます。これで、2つのメニュー項目を使用してボタンの状態を変更し、1つを非表示にして、クリックすると1つ表示することができます。

アクションバーボタンを切り替えるためのアクティビティのコードは次のとおりです。

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からフラグが付けられているかどうかです。

これどうやってするの?アクションバーにアクセスする必要があるレベル。アクティビティ、PagerAdapter、またはフラグメント?

4

1 に答える 1

22

を登録するViewPager.OnPageChangeListenerと、ViewPagerうまくいくはずです。onPageSelected(int pageNum)次に、ページが変更されたときにコールバックを受け取るようにオーバーライドします。

public void onPageSelected(int pageNum) {
     supportInvalidateOptionsMenu();
}
于 2013-02-28T11:54:40.377 に答える