2013-02-27 74 views
15

我在操作欄中有一個標記/書籤按鈕,我希望根據哪個片段在ViewPager的視圖中進行切換。android:根據ViewPager中的每個片段更新ActionBar項目?

如果用戶在ViewPager中標記了一個片段,它將被設置爲啓用。當用戶滑動到下一個時,我希望操作欄按鈕更新爲無標記。現在,我可以通過兩個菜單項並隱藏一個按鈕來改變按鈕的狀態,點擊時顯示一個。

這裏是在我的活動代碼切換操作欄按鈕:

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;活動,PagerAdapter或碎片?

+1

你可以試着總結一下你的問題嗎?據我瞭解,它是:「我的活動如何知道當前顯示哪個片段,因此我可以根據活動相應地更改我的ActionBar」,是嗎? – FWeigl 2013-02-27 15:25:34

+0

@Ascorbin這是關於如何通過ViewPager中的每個片段更改操作欄上的項目 – 2013-02-27 16:36:11

回答

22

在你的ViewPager上註冊一個ViewPager.OnPageChangeListener應該會有效。然後,重寫onPageSelected(int pageNum)以在頁面更改時接收回調。

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

太棒了!作品一種享受!當OnPageChangeListener存在於PagerAdapter中時,必須做一些技巧,但是這個解決方案解決了這個問題的基礎。謝謝! – 2013-03-08 09:16:50

+0

然後在你的活動的'onCreateOptionsMenu(菜單菜單)'檢查'viewPager.getCurrentItem()'並在適當的項目中填充需要的菜單 – Amt87 2015-08-12 12:47:46

相關問題