2012-09-14 24 views
5

मैं खत्म हो गया है, यह परिणाम गतिविधि के लिए ले जाएगा सौंपा मिनट के बाद जो पूरे gameactivity जहां में आप के रूप में ज्यादा सवाल सौंपा मिनट के भीतर आप कर सकते हैं का जवाब चाहिए के लिए एक टाइमर है एक प्रश्नोत्तरी एप्लिकेशन ..गतिविधि अभी भी खत्म होने के बाद जारी है();

है जो आपका स्कोर दिखाता है। बैक प्रेस पर, मैंने एक चेतावनी संवाद बनाया जो पूछता है कि क्या आप मुख्य मेनू पर वापस जाना चाहते हैं। यदि हाँ पर क्लिक किया गया है, तो पृष्ठ को मुख्य मेनू पर वापस जाना चाहिए और गेमएक्टिविटी को रोकना/मारना चाहिए।

हालांकि, जब मैं "हाँ" पर क्लिक करता हूं, तो यह मुख्य मेनू पर वापस जायेगा, लेकिन जब भी आप एप्लिकेशन में कहीं भी हों, तो परिणाम अभी भी पिछले गेमएक्टिविटी से दिखाए जाएंगे। वास्तव में gameactivity समाप्त हो सकता है मैं hadnt, .. यहाँ टाइमर और मेरी गतिविधि से वापस प्रेस टुकड़ा है:

new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 

@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

आपके परिणाम गतिविधि में सेट किया गया डेटा हो सकता है जब आप गतिविधि को समाप्त करते हैं तो आपको साफ़ नहीं किया जाता है, जिससे आप फिर से गतिविधि पर जाते समय पुराने डेटा देख सकते हैं। – Hiral

+0

आप गिनती बंद नहीं कर रहे हैं। – user996428

+0

मुझे लगता है, बस अनुमान लगाएं, उलटी गिनती टाइमर एक थ्रेड की तरह काम करता है, जो कि जब आप फिनिश() कॉल करते हैं तब भी चलते रहते हैं। इसके चलने को नियंत्रित करने के लिए टाइमर में एक बूलियन चर जोड़ने की कोशिश करें। – Huang

उत्तर

1

कोई गारंटी नहीं कि खत्म (है) तुरंत अपने वर्तमान गतिविधि बंद हो जाएगा (यह एंड्रॉयड तक है।)


आपकी समस्या यह कोशिश को हल करने के


(आप टाइमर रद्द करने के लिए इस का उपयोग किया जाएगा टाइमर के लिए एक संदर्भ पकड़ जब उपयोगकर्ता छुट्टी वर्तमान गतिविधि),

CountDownTimer resultTimer = new CountDownTimer(seconds, 1000) { 
    public void onTick(long millisUntilFinished) { 
      timer.setText("Seconds left: " + millisUntilFinished/1000); 
    } 
    public void onFinish() { 
      Intent intent = new Intent(GameActivityAddition.this, Score.class); 
      intent.putExtra("totalscore", score); 
      intent.putExtra("numberquestions", rowId); 
      intent.putExtra("d", difficulty); 
      db.close(); 
      startActivity(intent); 
    } 
}.start(); 


और onBackPressed (में) - setPositiveButton कॉलबैक में टाइमर रद्द,


@Override 
public void onBackPressed() { 
    AlertDialog.Builder abuilder = new Builder(GameActivityAddition.this); 
    abuilder.setMessage("Return to Main Menu?"); 
    abuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      resultTimer.cancel(); //Stop the timer 
      resultTimer = null; 
      Intent main = new Intent(GameActivityAddition.this, Main.class); 
      startActivity(main); 
      finish();   
     } 
    }); 
    abuilder.setNegativeButton("No", new DialogInterface.OnClickListener() { 

     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel();    
     } 
    }); 
    AlertDialog alert = abuilder.create(); 
    alert.show(); 
} 
+1

_ "कोई गारंटी नहीं है कि खत्म() आपकी वर्तमान गतिविधि को तुरंत बंद कर देगा (यह एंड्रॉइड तक है।)" _ - यह गलत है; जब 'खत्म() 'कहा जाता है, गतिविधि तुरंत समाप्त हो जाती है। _not_ समाप्त क्या प्रक्रिया है जिसमें गतिविधि रहती है। तो गतिविधि के दौरान सेट किया गया कोई भी स्थिर डेटा सेट रहेगा। –

+0

मेरा बुरा, मुझे अतिरिक्त जानकारी प्रदान करनी चाहिए थी।इस बात की कोई गारंटी नहीं है कि गतिविधि के डेस्ट्रॉय को तत्काल बुलाया जाएगा (भले ही गतिविधि स्क्रीन से पूरी तरह से हटा दी गई हो) और स्मृति बनाए रखा न केवल स्थिर डेटा के अनुरूप है। – 66CLSjY

+0

@ 66CLSjY - आपके विस्तृत उत्तर के लिए धन्यवाद। निश्चित रूप से हल किया! :) – omi0301

0

बच्चे गतिविधि से एक माता पिता गतिविधि फिनिशिंग startActivityForResult का उपयोग करके बाल गतिविधि शुरू करके कार्यान्वित किया जा सकता है और परिणाम को संसाधित करने के लिएActivityResult को कार्यान्वित कर सकता है बाल गतिविधि से वापसी। उदाहरण: अभिभावक गतिविधि से, startActivityForResult() का उपयोग करके परिणामस्वरूप बाल गतिविधि शुरू करें। फिर, एक परिणाम निर्धारित करें जो माता-पिता सक्रियता को भी समाप्त करने के लिए सूचित करेगा। चाइल्डएक्टिविटी में कॉल फिनिश()। जब अभिभावक गतिविधि को बाल गतिविधि से परिणाम प्राप्त होता है, तो माता-पिता सक्रियता भी समाप्त होती है() स्वयं भी। और वहां आप एक और गतिविधि शुरू कर सकते हैं।

कोड के लिए संदर्भ लें: http://www.androidcompetencycenter.com/2009/03/tutorial-how-to-start-a-new-activity/

+0

मैंने अपने ऐप में बिल्कुल वैसा ही किया है लेकिन समस्या तब होती है जब बाल गतिविधि पर बैक बटन दबाया जाता है, गतिविधि रोक दी जाती है और माता-पिता गतिविधि के ऑनस्यूम() एस और इसके टुकड़े पूरी तरह से बुलाए जाते हैं। हालांकि 1. गतिविधि को खत्म करने में बहुत अधिक समय लगता है और ऐसा लगता है कि फोन लटका हुआ है। 2. अगली बार जब मैं कोई संवाद दिखाता हूं तो यह काम नहीं करेगा, क्योंकि बाल गतिविधि अभी भी उनका नहीं है लेकिन दिखाई नहीं दे रहा है .... अब अगर मैं स्क्रीन को घुमाता हूं या कुछ अन्य टुकड़े पर जाता हूं तो बच्चे की गतिविधि और बच्चे के डेस्ट्रॉय को बुलाया जाता है और उसके बाद सबकुछ सामान्य लगता है। – aProgrammer

1

CountDownTimer की संपत्ति है, यहां तक ​​कि आप गतिविधि यह उलटी गिनती जारी है समाप्त हो गया। यदि आप इसे रोकना चाहते हैं, तो countTimerVar.cancel() डाल दें जब आप finish() और pressBackButton में रखें।