2013-02-27 1 views
15

Nella barra delle azioni è presente un pulsante flag/segnalibro che si desidera attivare o disattivare a seconda del frammento in vista di ViewPager.android: aggiorna le voci di ActionBar in base a ciascun frammento in un ViewPager?

Se l'utente segnala un frammento nel ViewPager, verrà impostato su abilitato. Quando l'utente passa alla successiva, voglio che il pulsante della barra delle azioni si aggiorni in modo che non sia stato rimosso. Ora, sono in grado di cambiare lo stato del pulsante con due voci di menu e nasconderne uno, mostrarne uno quando si fa clic.

Ecco il codice nella mia attività per spostare il pulsante Azione 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); 
} 

Il problema che sto avendo è che non posso accedere alla voce di menu, salvare & ripristinare lo stato del pulsante, vale a dire se è contrassegnato o meno dal frammento o dal FragmentPagerAdapter.

Come posso fare questo? A quale livello dovrei accedere alla barra delle azioni? Attività, PagerAdapter o Frammenti?

+1

Puoi provare a riassumere la tua domanda? Per quanto ho capito, è: "Come può la mia attività sapere quale frammento è attualmente visualizzato, così posso modificare di conseguenza la mia ActionBar dall'attività", giusto? – FWeigl

+0

@Ascorbin Si tratta di come modificare gli elementi sulla barra delle azioni da ciascun frammento in un ViewPager –

risposta

22

La registrazione di un ViewPager.OnPageChangeListener sul ViewPager dovrebbe risolvere il problema. Quindi, sovrascrivere onPageSelected (int pageNum) per ricevere le richiamate quando una pagina cambia.

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

Great! Funziona a meraviglia! Dovevo fare alcuni trucchi mentre OnPageChangeListener era in un PagerAdapter, ma questa soluzione risolve la base del problema. Grazie! –

+0

Quindi nel menu attività onCreateOptions (menu Menu), seleziona 'viewPager.getCurrentItem()' e gonfia il menu necessario nell'elemento appropriato – Amt87