سؤال

onActivityResult يعطيني الصداع الكبير. لعبتي الصغيرة لديها شاشة عنوان / قائمة. عند النقر على "لعبة جديدة" يتم إطلاق نشاط يخلق SurfaceView لعالم الألعاب الخاص بي.

عند اللعب ، يمكن للاعب إدخال المباني في عالم اللعبة. عند الدخول في مبنى أطلق النشاط لهذا المبنى بالذات من SurfaveView الخاص بي. هنا مثال:

   Intent storeIntent = new Intent(mMinerClass, GeneralStore.class);
   storeIntent.putExtra("player", mPlayer.save());   
    ((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE);

يتم تعريف MminerClass في نشاط اللعبة onCreate:

  mMap .mMinerClass = Miner.this;

MMAP هو SurfaceView. أنا أعبر حزمة تحتوي على حالة اللاعب. في onActivityResult ، أمسك الحزمة التي تم إرجاعها بواسطة نشاط المتجر وتحديث حالة المشغل.

 public void onActivityResult(int requestCode, int resultCode, Intent intent) {
      Bundle player = intent.getExtras();
      mMap.mSavedPlayer = player;
  }

يستخدم MsaVedPlayer لاحقًا لتعيين حالة اللاعب الجديدة.

كل ما سبق يعمل بشكل عام

يمكنني إدخال المتاجر ، وشراء الأشياء ، والمغادرة ، ويتم تحديث المشغل بشكل صحيح.

المشكلة يتجلى عندما أضغط على زر الصفحة الرئيسية (أو زر العودة إلى بعض الأحيان) ويتم استدعاء OnDestroy. لا تفعل طريقة OnDestroy شيئًا إلى جانب استدعاء Super.ondestroy () ؛

بعد أن يتم استدعاء ondestroy () لم يعد يتم استدعاء onActivityResult.

لذا:

1) ألعب اللعبة ، يعمل Everthing بشكل رائع.

2) أنا أضغط على المنزل ويسمى ondestroy

3) إعادة تشغيل لعبتي عبر أيقونة Launcher

4) لعبة السيرة الذاتية. لا يزال بإمكاني الدخول وترك المتاجر ولكن لم يعد يطلق على onActivityResult.

هنا بعض الإخراج logcat. أنا أسجل في كل مرة أدخل فيها طريقة ذات صلة.

  App start.  Resuming a saved game
  07-03 00:33:04.759: ERROR/Miner(4014): -->onCreate
  07-03 00:33:04.819: ERROR/Miner(4014): -->onStart
  07-03 00:33:08.329: ERROR/Miner(4014): -->onResume

  Enter store and buy stuff 2 times.  Everything working great.
  07-03 00:33:30.419: ERROR/Miner(4014): -->onPause
  07-03 00:33:31.279: ERROR/Miner(4014): -->onStop
  07-03 00:33:35.069: ERROR/Miner(4014): -->onActivityResult
  07-03 00:33:35.069: ERROR/Miner(4014): -->onRestart
  07-03 00:33:35.069: ERROR/Miner(4014): -->onStart
  07-03 00:33:36.709: ERROR/Miner(4014): -->onResume
  07-03 00:33:42.129: ERROR/Miner(4014): -->onPause
  07-03 00:33:43.289: ERROR/Miner(4014): -->onStop
  07-03 00:33:55.279: ERROR/Miner(4014): -->onActivityResult
  07-03 00:33:55.279: ERROR/Miner(4014): -->onRestart
  07-03 00:33:55.279: ERROR/Miner(4014): -->onStart
  07-03 00:33:56.879: ERROR/Miner(4014): -->onResume

  Back button pressed bringing me to title screen
  07-03 00:35:26.283: ERROR/Miner(4014): -->onPause
  07-03 00:35:27.153: ERROR/Miner(4014): -->onStop
  07-03 00:35:27.333: ERROR/Miner(4014): -->onDestroy

  Resume Game
  07-03 00:36:12.953: ERROR/Miner(4014): -->onCreate
  07-03 00:36:13.003: ERROR/Miner(4014): -->onStart
  07-03 00:36:14.663: ERROR/Miner(4014): -->onResume

  Enter store and buy stuff twice.  No more onActivityResult

  07-03 00:36:52.063: ERROR/Miner(4014): -->onPause
  07-03 00:36:52.863: ERROR/Miner(4014): -->onStop
  07-03 00:36:59.913: ERROR/Miner(4014): -->onRestart
  07-03 00:36:59.913: ERROR/Miner(4014): -->onStart
  07-03 00:37:01.593: ERROR/Miner(4014): -->onResume
  07-03 00:37:23.353: ERROR/Miner(4014): -->onPause
  07-03 00:37:24.173: ERROR/Miner(4014): -->onStop
  07-03 00:37:29.173: ERROR/Miner(4014): -->onRestart
  07-03 00:37:29.173: ERROR/Miner(4014): -->onStart
  07-03 00:37:30.793: ERROR/Miner(4014): -->onResume

أقوم بنشر هذا من هاتفي ، لذا أعذر أي أخطاء غبية.

أنا أقدر أي رؤية يمكن أن تقدمها فيما يتعلق بهذا. شكرًا!

هل كانت مفيدة؟

المحلول

يجب أن تضع اهتمامًا إضافيًا لهذا الخط:

((Activity) mContext).startActivityForResult(storeIntent, Miner.REQUEST_STORE)

هل أنت متأكد من أن McOntext هو النشاط الصحيح؟ أظن أنه ليس النشاط الحالي ولكن الإشارة إلى مثيل نشاط آخر ، وهو الأول الذي تم إغلاقه من قبل. هل يمكنك استخدام "هذا" بدلاً من McOntext؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top