2012-08-15 2 views
12

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

+0

controlla questa discussione in abs: https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca

risposta

14

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.

+0

Dovrebbe inserire 'isInActionMode = true;' solo in 'onCreateActionMode()' altrimenti la prossima rotazione non raccoglierà lo stato . – Saran

+0

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

+0

Ovviamente. È necessario salvare lo stato dei dati dinamici (ad esempio le selezioni) e ripristinarli successivamente. – galex