2013-02-27 6 views
15

アクションバーにフラグ/ブックマークボタンがあります。このフラグは、ViewPagerのビューにあるフラグメントに応じてオン/オフを切り替えることができます。アンドロイド:ViewPagerの各フラグメントに応じてActionBarアイテムを更新しますか?

ユーザーがViewPagerでフラグメントにフラグを付けると、有効に設定されます。ユーザーが次のスワイプにスワイプすると、アクションバーのボタンを更新してフラグを付けないようにします。今、ボタンの状態を2つのメニュー項目を持つことで変更でき、クリックすると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からフラグが立てられているかどうかを判定します。

どうすればいいですか?アクションバーにアクセスするレベルはどれですか。アクティビティ、ページャアダプタ、またはフラグメント?

+1

あなたの質問を要約できますか?私が理解しているところでは、「どのアクティビティで現在表示されているフラグメントがわかるので、それに応じてアクティビティからActionBarを変更することができますか? – FWeigl

+0

@Ascorbinそれは、ViewPagerの各フラグメントによってアクションバーのアイテムを変更する方法です。 –

答えて

22

ViewPager.OnPageChangeListenerをViewPagerに登録すると、そのトリックを行う必要があります。次に、ページが変更されたときにコールバックを受け取るためにonPageSelected(int pageNum)をオーバーライドします。

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

素晴らしい!治療をしなさい! OnPageChangeListenerがPagerAdapterにあったので、いくつかのトリッキーなことをしなければならなかったが、この解決策は問題の根本を解決する。ありがとう! –

+0

アクティビティの 'onCreateOptionsMenu(メニューメニュー)'で 'viewPager.getCurrentItem()'をチェックし、適切な項目に必要なメニューを展開します – Amt87

関連する問題