2012-08-15 32 views
12

我有啓動動作模式的listfragment。我正在使用actionbarsherlock。但是當方向發生變化時,或者當我開始新的活動時,上下文相關的actionbar消失。 有什麼辦法可以恢復它,而無需重新啓動它?在谷歌Gmail應用程序它保持在屏幕上,無論我旋轉手機或轉到詳細畫面。方向更改後恢復動作模式

+0

檢查出這個abs問題線程:https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca 2012-08-23 00:00:55

回答

14

更好的方法是使用onSaveInstanceState在循環前保存ActionMode狀態。

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

根據Saran的評論更新。

+0

應該把'isInActionMode = true;'只在'onCreateActionMode()'中,否則下一次旋轉不會拿起狀態。 – Saran 2013-08-31 10:02:23

+0

這並不能真正恢復操作模式。它重新創建它。所以你必須重新創建動作模式標題並重做所有項目選擇。 – faizal 2014-06-18 07:18:46

+0

當然。您必須保存動態數據的狀態(例如選擇)並稍後恢復。 – galex 2014-06-18 09:23:14