簡體   English   中英

在Android中的三個活動之間傳遞捆綁

[英]Pass bundle between three activities in Android

我有三個活動,我可以稱之為A,B和C.我想在這三個活動之間傳遞信息:A - > B - > C - > A. 在AI中想要檢查是否有傳遞包(第一次啟動時,例如不會有一個)。 數據從AB傳遞,帶有正常捆綁。 從B - > CI使用此:

Intent i = new Intent(getApplicationContext(), FlashcardView.class);
             i.putExtra("rattning", rattning);
             i.putExtra("noqs", noqs);
             i.putExtra("categoryid", categoryid);
             CreateTestView.this.finish();
             startActivityForResult(i, 0);

它被收到然后發送到A這樣:

  Intent data = new Intent(FlashcardView.this, MenuView.class);
                       data.putExtra("point", point);
                       data.putExtra("noqs", noqs);
                       setResult(RESULT_OK, data);
                       finish();

在A收到這樣的:

 @Override 
   protected void onActivityResult( int req, int resp, Intent data ) {
        super.onActivityResult(req, resp, data);
        // process your received "data" from GameActivity ...
        Bundle b = getIntent().getExtras();
        noqs = b.getInt("noqs");
        point = b.getInt("point");
        mTvCat.setText("hhhhhh"+point+noqs);
        publishOnFacebook(point,noqs);
    }

看起來好像捆綁在從C - > A的路上丟失了。 當我從C - > B傳回來時沒有問題。 我認為這是因為B是啟動C的活動,因此C回落到B而不是A.我通過在B上調用finish()進行復飛,所以C回到A而不是。 堅持這樣做我失去了捆綁。 或者至少我是這么認為的。

誰看過這個嗎? 有沒有更好的方法呢? 如何在兩次以上活動之間傳遞時防止丟失捆綁? 謝謝!

編輯:

編輯:這是接收廣播時的錯誤代碼:

  03-07 12:57:59.394: ERROR/AndroidRuntime(803): java.lang.RuntimeException: Error receiving broadcast Intent { act=my_action (has extras) } in com.crystalcodeab.Flashcard.MenuView$1@47681ad0
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:981)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at android.os.Handler.handleCallback(Handler.java:587)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at android.os.Looper.loop(Looper.java:143)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at android.app.ActivityThread.main(ActivityThread.java:5068)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at java.lang.reflect.Method.invokeNative(Native Method)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at java.lang.reflect.Method.invoke(Method.java:521)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at dalvik.system.NativeStart.main(Native Method)
03-07 12:57:59.394: ERROR/AndroidRuntime(803): Caused by: java.lang.NullPointerException
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at com.crystalcodeab.Flashcard.MenuView$1.onReceive(MenuView.java:56)
03-07 12:57:59.394: ERROR/AndroidRuntime(803):     at 

我認為問題在於你如何完成活動B.當你完成活動B時,B的結果被發送回A並且活動消失了。 C無法知道它應該將結果返回給A,因為它只知道活動B.

我的建議是你應該在活動A中使用BroadcastReceiver。然后在活動C中你可以發送一個廣播,其中包含你希望被A接收的數據:

在一個:

IntentFilter filter = new IntentFilter("my.action");
BroadcastReceiver receiver = new BroadcastReceiver() {
  public void onReceive(Context context, Intent intent) {
    if(intent.getAction().equals("my.action")) {
      // Do my stuff
    }
  }
}
registerReceiver(receiver, filter);

在C:

Intent data = new Intent("my.action");
data.putExtra("point", point);
data.putExtra("noqs", noqs);
sendBroadcast(data);

您可能希望在游戲中使用Fragment而不是活動,並在FragmentManager中管理狀態轉換,而不是嘗試使用Activity堆棧。 似乎管理起來可能更容易一些。

完成活動B后,為什么使用新的Intent而不是getIntent()方法?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM