Ho uno schermo che utilizza le schede Sherlock della barra delle azioni di ViewPager +. Ho una serie setOnPageChangeListener
sul cercapersone e lo fa il seguente:Barra delle applicazioni Sherlock - le schede non cambieranno in orizzontale quando si fa scorrere lo schermo
@Override
public void onPageSelected(final int position) {
actionBar.setSelectedNavigationItem(position);
}
Questo funziona bene in modalità verticale e anche nel paesaggio se ho solo poche schede e vengono visualizzate tutte le schede. Tuttavia, se aggiungo alcune altre schede in orizzontale, queste vengono compresse in un singolo widget a discesa. Quando sfoglio il ViewPager, il metodo setSelectedNavigationItem
viene eseguito ma ora non ha alcun effetto sulla selezione del menu a discesa: rimane nell'ultimo valore selezionato. Il che è davvero pessimo in quanto all'utente manca un indizio visivo: la scheda potrebbe dire "Uno" ma l'utente è già sulla pagina # 6.
C'è un modo per cambiare a livello di programmazione quale scheda visualizzare in base alla posizione?
P.S. Io so perché questo accade: Ecco il codice da com.android.internal.app.ActionBarImpl:
public void setSelectedNavigationItem(int position) {
switch (mActionView.getNavigationMode()) {
case NAVIGATION_MODE_TABS:
selectTab(mTabs.get(position));
break;
case NAVIGATION_MODE_LIST:
mActionView.setDropdownSelectedPosition(position);
break;
default:
throw new IllegalStateException(
"setSelectedNavigationIndex not valid for current navigation mode");
}
}
E quando faccio un passo attraverso che posso vedere che la modalità di navigazione è ancora NAVIGATION_MODE_TABS se le schede vengono visualizzate come lista. Ora - la mia reazione istintiva è di mettere il codice in onConfigurationChanged per impostare correttamente la modalità di navigazione, ma questo non dovrebbe accadere automaticamente?
P.P.S. E c'è Android bug ha presentato istanza di già che contiene la patch
questa soluzione funziona per ActionBar nativo ma non funziona per quella di compatibilità (su un emulatore Gingerbread). come può essere risolto anche questo? –
Grazie! Questo funziona sicuramente :-) –
Grazie! Finalmente trovato una soluzione funzionante. – Ahmad