2012-08-15 23 views
12

Ich habe listfragment, das den actionmode startet. Ich benutze Actionbarsherlock. Aber wenn sich die Ausrichtung ändert oder wenn ich eine neue Aktivität starte, wird die Kontext-Aktionsleiste ausgeblendet. Gibt es eine Möglichkeit, es wiederherzustellen, ohne es erneut zu starten? In google gmail App bleibt es auf dem Bildschirm, ob ich Telefon rotiere oder auf den Detailbildschirm gehe.Aktionsmode nach der Änderung der Orientierung wiederherstellen

+0

überprüfen Sie diese abs Frage Thread: https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca

Antwort

14

Der bessere Weg ist onSaveInstanceState verwenden ActionMode Zustand vor der Drehung zu speichern.

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

Aktualisiert nach Sarans Kommentar.

+0

Sollte put 'isInActionMode = true;' nur in 'onCreateActionMode()' sonst nächste Drehung wird nicht den Zustand übernehmen . – Saran

+0

Dadurch wird der Aktionsmodus nicht wirklich wiederhergestellt. Es schafft es neu. Also müssen Sie den Action-Modus-Titel neu erstellen und alle Elementauswahlen wiederholen. – faizal

+0

Natürlich. Sie müssen den Status dynamischer Daten (z. B. Auswahlen) speichern und später wiederherstellen. – galex

Verwandte Themen