2012-08-29 24 views
7

मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं। अगर मैं एक वापस बटन अपने आवेदन की स्थिति को बचाया जाना चाहिए .क्या मैं राज्य को बचाने के लिए इस्तेमाल करना चाहिए प्रेस इन onPause(), onResume(), या onRestoresavedInstance() के सभी के साथ भ्रमित ..am ??? इनमें से किस का उपयोग मेरे आवेदन की स्थिति को बचाने के लिए करना चाहिए ?? उदाहरण के लिए जब मैं निकास बटन दबाता हूं तो मेरा पूरा ऐप बाहर निकलना चाहिए, मैंने फिनिश() का उपयोग किया है?वापस बटन दबाए जाने पर राज्य को सहेजें

public void onCreate(Bundle savedInstanceState) 
    { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    s1=(Button)findViewById(R.id.sn1); 
    s1.setOnClickListener(this); 
    LoadPreferences(); 
    s1.setEnabled(false); 
    } 

    public void SavePreferences() 
{ 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     SharedPreferences.Editor editor = sharedPreferences.edit(); 
     editor.putBoolean("state", s1.isEnabled()); 
     } 
public void LoadPreferences() 
{ 
    System.out.println("LoadPrefe"); 
     SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
     Boolean state = sharedPreferences.getBoolean("state", false); 
     s1.setEnabled(state); 
     } 
@Override 
public void onBackPressed() 
{ 
    System.out.println("backbutton"); 
    SavePreferences(); 
    super.onBackPressed(); 
} 
+0

तो गतिविधि बंद हो रहा है, OnDestroy का उपयोग() – Aviral

+0

आवेदन राज्य किस तरह आप सहेजना चाहते हैं? कुछ टेक्स्टबॉक्स या सूची मूल्य? – VendettaDroid

+0

टेक्स्टबॉक्स या अन्य महत्वपूर्ण UI के लिए मूल्यों को सहेजना साझािकरणों की सहायता से किया जा सकता है। इसलिए, भले ही एप्लिकेशन निकलता है या नष्ट हो जाता है, कोई भी सहेजे गए मूल्यों को साझा संदर्भों से पढ़ सकता है। – VendettaDroid

उत्तर

8

आप क्या करना है, बजाय कीकोड वापस का उपयोग करने का, आप अपने गतिविधि में नीचे दी गई विधि ओवरराइड

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
} 

और अपने बटन SharedPrefrence का उपयोग कर के राज्य को बचाने के लिए है, और अगली बार जब आप अपनी गतिविधि को से साझा करें मूल्य साझा करें और तदनुसार अपने बटन की सक्षम स्थिति सेट करें।

उदाहरण के लिए,

private void SavePreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putBoolean("state", button.isEnabled()); 
    editor.commit(); // I missed to save the data to preference here,. 
    } 

    private void LoadPreferences(){ 
    SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE); 
    Boolean state = sharedPreferences.getBoolean("state", false); 
    button.setEnabled(state); 
    } 

    @Override 
public void onBackPressed() { 
    SavePreferences(); 
    super.onBackPressed(); 
} 

onCreate(Bundle savedInstanceState) 
{ 
    //just a rough sketch of where you should load the data 
    LoadPreferences(); 
} 
+0

मुझे कोड समझा गया। यह मेरा आवेदन सर है, जहां उपयोगकर्ता Google मानचित्र के माध्यम से एक गंतव्य का चयन करता है। एप्लिकेशन उपयोगकर्ता के वर्तमान स्थान को ट्रैक करता है और जब उपयोगकर्ता desination तक पहुंचता है तो अलार्म स्नूज़ किया जाता है। इसलिए मुझे राज्य को सहेजना है मेरे बटन के, जीपीएस को पृष्ठभूमि में चलाना है, उपयोगकर्ता द्वारा चुने गए अलार्म टोन को सहेजना है, स्नूज़ बटन स्टेटस को सक्षम करना है। तो जैसा कि आपने बताया था कि मैं उन सभी बटनों के लिए SavePreferences और LoadPreferences को परिभाषित करना चाहता हूं ???? – Sindu

+0

हाँ आप साझा प्राथमिकता का उपयोग कर सभी आदिम डेटा प्रकारों को सहेज सकते हैं। उपरोक्त कोड को अपनी आवश्यकता के अनुसार संशोधित करें और आपको जाने के लिए अच्छा होना चाहिए। बटन के सभी राज्य प्राप्त करें और इसे विभिन्न महत्वपूर्ण मान से सहेजें। स्ट्रिंग कुंजी का उपयोग करके स्वर नाम को भी बनाए रखें और जब आप वापस आएं तो इसका उपयोग करें। –

+0

क्या मैं रोक या ऑनयूज़्यूम का उपयोग कर सकता हूं ताकि मेरा साझाकरण इस साझा किए गए संदर्भों के बजाय सहेजा जा सके? – Sindu

3

आप इस तरह से

public void onBackPressed() { 
    // Save settings here 
}; 

कहा जाता है जब गतिविधि वापस कुंजी के उपयोगकर्ता की प्रेस का पता लगाया है उपयोग कर सकते हैं। डिफ़ॉल्ट कार्यान्वयन केवल वर्तमान गतिविधि को समाप्त करता है, लेकिन आप इसे जो भी चाहते हैं उसे करने के लिए ओवरराइड कर सकते हैं।

इस पद्धति में अपने आवेदन राज्य को बचाने के।