5

Ho un TabActivity con quattro schede (ciascuna è la propria attività). Ogni scheda definisce il proprio onCreateOptionsMenu (e in alcuni casi, onPrepareOptionsMenu). Quando viene caricata ciascuna scheda, viene avviato un numero AsyncTask per recuperare i dati necessari per compilare l'elenco di tali schede.Strano comportamento del menu opzioni in TabActivity Android

Se si passa da una scheda all'altra rapidamente (mentre stanno ancora caricando) e quindi si preme il pulsante menu (mentre la scheda attuale è AsyncApiTask ancora in esecuzione), sono in grado di visualizzare il menu delle opzioni errato.

Per esempio, diciamo che FooActivity (scheda 1) ha un menu di opzioni con una voce "Aggiorna", e BarActivity (scheda 2) ha un menu di opzioni con un "View All" oggetto. Se avvio l'app (con la scheda 1 attiva), passa rapidamente alla scheda 2, quindi al menu dei risultati, a volte viene visualizzata la voce "Aggiorna" (anziché la voce "Visualizza tutto" prevista).

Inoltre, mentre questo strano comportamento a volte si verifica solo al primo menù premere (e presse successive mostrano gli elementi a destra), a volte diventa "bloccato", e gli articoli errati mostrare su ogni pressione fino a quando posso passare schede.

Qualche idea su cosa potrebbe succedere? Non ho mai sentito di ciò che sta succedendo e non sono stato in grado di trovare buoni suggerimenti.

+0

Questo è uno della lista apparentemente infinita di motivi per cui Detesto utilizzando le attività come il contenuto delle schede. Rendi le tue schede semplici Viste e disponi del tuo * singolo * 'onPrepareOptionsMenu()' per delegare un'implementazione basata sulla scheda attiva. – CommonsWare

+0

Ah eccellente, è estremamente confortante sapere che non sto facendo qualcosa di terribilmente sbagliato per causare questo. Prenderò in considerazione questa soluzione. Grazie! – jakeboxer

risposta

0

Sì, consiglio CommonsWare è una soluzione migliore! Si potrebbe anche prendere in considerazione l'utilizzo di FragmentTabHost e frammenti per ogni scheda. In questo modo l'attività dell'host può aggiornare centralmente il menu delle opzioni da onTabChanged(String tab).

Mentre un AsyncTask viene generato da un Activity, se non è stato eseguito onPostExecute(...), è ancora in corso. Inoltre, poiché il comportamento predefinito di AsyncTask s è variabile (versioni diverse di loro in modo sequenziale/parallelo eseguito Android), è difficile da controllare, senza il proprio ThreadPoolExecutor. Il tuo cambio rapido Activity e ripetuto AsyncTask s sembra bloccare.

Problemi correlati