Utilizzo delle opzioni del menu in un multi-Frammento di attività
-
27-10-2019 - |
Domanda
Ho un FragmentActivity
che ospita una FragmentStatePagerAdapter
. Il cercapersone contiene più istanze dello stesso frammento, in modo che l'utente può scorrere tra le voci di un elenco. Voglio essere in grado di fornire all'utente un menu di opzioni che agire solo sulla voce visibile.
Per esempio, ho un elenco di immagini visualizzate in imageviews all'interno frammenti. Voglio un'opzione di menu che permette all'utente di impostare l'immagine come la carta da parati.
Nel momento in cui provo questo, quando onPrepareOptionsMenu
viene chiamato, il codice viene chiamato in più frammenti (di solito la corrente + successiva). Lo stesso quando viene selezionato un elemento. Questo fa sì che l'immagine sbagliata da impostare come sfondo.
Come posso evitare che il menu delle opzioni di attivazione per oltre il frammento attualmente visibile?
Soluzione
La mia soluzione era quella di utilizzare il metodo setOnPageChangeListener
del ViewPager
al fine di tenere traccia di quali indice Fragment
era attualmente visibile con la richiamata onPageSelected
. Hai ancora per ottenere l'indice iniziale da soli, ma nel mio caso questo è stato banale
Altri suggerimenti
È possibile intercettare la richiamata nel menu delle opzioni onOptionsItemSelected della propria attività, e in modo esplicito chiamare l'elemento dal frammento corretto là, restituendo vero per indicare che hai gestito esso.
Il trucco è quello di cambiare sethasoptions (true | false) su ogni frammento prima di menù popolamento. Questo già mi ha aiutato