2012-08-15 10 views
12

मेरे पास सूचीफ्रेम है जो एक्शनमोड शुरू करता है। मैं actionbarsherlock का उपयोग कर रहा हूँ। लेकिन जब अभिविन्यास बदलता है, या जब मैं नई गतिविधि प्रासंगिक एक्शनबार अपघटन शुरू करता हूं। क्या इसे फिर से शुरू किए बिना इसे पुनर्स्थापित करने का कोई तरीका है? गूगल जीमेल ऐप में यह स्क्रीन पर रहता है कि मैं फोन घुमाता हूं या विस्तार स्क्रीन पर जाता हूं।अभिविन्यास परिवर्तन के बाद एक्शनमोड को पुनर्स्थापित करें

+0

इस पेट समस्या थ्रेड को देखें: https://github.com/JakeWharton/ActionBarSherlock/issues/463 – newbyca

उत्तर

14

रोटेशन से पहले एक्शनमोड स्थिति को सहेजने के लिए SaveInstanceState पर बेहतर तरीका का उपयोग किया जाता है।

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

सरन की टिप्पणी के अनुसार अपडेट किया गया।

+0

'isInActionMode = true;' केवल 'onCreateActionMode()' में होना चाहिए अन्यथा अगला रोटेशन राज्य नहीं उठाएगा । – Saran

+0

यह वास्तव में एक्शन मोड को पुनर्स्थापित नहीं करता है। यह इसे फिर से शुरू करता है। तो आपको एक्शन मोड शीर्षक को फिर से बनाना होगा और सभी आइटम चयनों को फिर से करना होगा। बेशक – faizal

+0

। आपको गतिशील डेटा की स्थिति (उदाहरण के लिए चयन) को सहेजना होगा और बाद में इसे पुनर्स्थापित करना होगा। – galex

संबंधित मुद्दे