Ho un elenco di programmi che avvia la modalità di azione. Sto usando actionbarsherlock. Ma quando l'orientamento cambia, o quando inizio una nuova attività, la barra di azione contestuale scompare. C'è un modo per ripristinarlo, senza avviarlo di nuovo? Nell'app google gmail rimane sullo schermo sia che ruoti il telefono sia che vada alla schermata dei dettagli.Restore ActionMode dopo il cambio di orientamento
risposta
Il modo migliore è utilizzare onSaveInstanceState per salvare lo stato ActionMode prima della rotazione.
public abstract class MyActivity extends SherlockFragmentActivity{
private boolean isInActionMode = false;
@Override
public void onCreate(Bundle state){
super.onCreate(state);
if (state != null && state.getBoolean("ActionMode", false)){
startActionMode(new MyActionMode());
}else{
///whatever you'd normally do
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
// Save isInActionMode value
outState.putBoolean("ActionMode", isInActionMode);
super.onSaveInstanceState(outState);
}
public void onWhateverEventNormallyStartsYourActionMode(){
startActionMode(new MyActionMode());
}
public class MyActionMode implements ActionMode.Callback{
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
isInActionMode = true;
///whatever you'd normally do
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
///whatever you'd normally do
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
///whatever you'd normally do
}
@Override
public void onDestroyActionMode(ActionMode mode) {
isInActionMode = false;
}
}
}
Aggiornato secondo il commento di Saran.
Dovrebbe inserire 'isInActionMode = true;' solo in 'onCreateActionMode()' altrimenti la prossima rotazione non raccoglierà lo stato . – Saran
Questo in realtà non ripristina la modalità di azione. Lo ricrea di nuovo. Quindi è necessario ricreare il titolo della modalità di azione e ripetere tutte le selezioni degli elementi. – faizal
Ovviamente. È necessario salvare lo stato dei dati dinamici (ad esempio le selezioni) e ripristinarli successivamente. – galex
controlla questa discussione in abs: https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca