2013-02-27 11 views
15

Mam przycisk flagi/zakładki na pasku akcji, który chcę włączać lub wyłączać w zależności od tego, który Fragment jest widoczny w ViewPager.android: Aktualizacja elementów ActionBar w zależności od każdego Fragmentu w ViewPager?

Jeśli użytkownik zaznaczy fragment w oknie ViewPager, zostanie włączony. Gdy użytkownik przeskoczy do następnego, chcę, aby przycisk paska akcji został zaktualizowany do niezatwierdzonej. Teraz jestem w stanie zmienić stan przycisku, mając dwa elementy menu i ukryć jeden, pokaz po kliknięciu.

Oto kod w mojej działalności, aby włączyć przycisk Akcja bar:

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); 
} 

Problem mam jest to, że nie mogę wejść do menu, zapisz & przywrócić stan przycisku, tj. jeśli jest oznaczony flagą lub nie z fragmentu lub FragmentPagerAdapter.

Jak mogę to zrobić? Na jakim poziomie powinienem uzyskać dostęp do paska akcji; Aktywność, PagerAdapter lub Fragmenty?

+1

Czy możesz spróbować podsumować swoje pytanie? O ile zrozumiałem, jest to: "Jak moja aktywność może wiedzieć, który fragment jest aktualnie wyświetlany, aby odpowiednio zmienić mój ActionBar z działania", czy to prawda? – FWeigl

+0

@Ascorbin Chodzi o to, jak zmieniać elementy na pasku akcji przez każdy fragment w ViewPager –

Odpowiedz

22

Zarejestrowanie ViewPager.OnPageChangeListener na ViewPager powinno załatwić sprawę. Następnie należy zastąpić onPageSelected (int pageNum), aby oddzwonić po zmianie strony.

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

Świetnie! Działa jako uczta! Musiał zrobić pewne oszustwa, ponieważ OnPageChangeListener był w PagerAdapter, ale to rozwiązanie rozwiązuje podstawę problemu. Dzięki! –

+0

Następnie w menu "onCreateOptions" (menu menu) 'sprawdź' viewPager.getCurrentItem() 'i nadmuchaj potrzebne menu w odpowiednim elemencie – Amt87

Powiązane problemy