2012-08-15 34 views
12

Tengo listfragment que inicia actionmode. Estoy usando actionbarsherlock. Pero cuando la orientación cambia, o cuando comienzo una actividad nueva, la barra de acción contextual desaparece. ¿Hay alguna forma de restablecerlo, sin reiniciarlo? En la aplicación de google gmail permanece en la pantalla ya sea que gire el teléfono o vaya a la pantalla de detalles.Restaurar ActionMode después de cambiar la orientación

+0

echa un vistazo a esta cuestión de abs hilo: https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca

Respuesta

14

La mejor manera es utilizar en Guardar estado de instancia para guardar el estado del modo de acción antes de la rotación.

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; 
     } 
    } 
} 

Actualizado de acuerdo con el comentario de Saran.

+0

Debe poner 'isInActionMode = true;' solo en 'onCreateActionMode()' de lo contrario, la próxima rotación no recogerá el estado . – Saran

+0

Esto realmente no restaura el modo de acción. Lo recrea de nuevo. Por lo tanto, debe recrear el título del modo de acción y volver a hacer todas las selecciones de elementos. – faizal

+0

Por supuesto. Debe guardar el estado de los datos dinámicos (por ejemplo, las selecciones) y restaurarlos más tarde. – galex

Cuestiones relacionadas