2017-04-19 60 views
0

在我正在開發的應用程序中,我有2個活動,ActAActB活動在轉換期間被重新創建

ActA是第一個顯示。

我們可以說ActA像SplashScreen一樣工作。

的ActA我retrive一些數據,我需要在ACTB用於執行一些任務。

當這些數據得到回覆時,我可以調用一個意圖執行切換到ActB

這裏的問題: ACTB延伸的ActA becouse需要的ActA retrived數據來執行他的任務。

大概becouse的是,在當下ACTB被調用,的ActA法 「的OnCreate」 被調用到。

這創建一個循環becouse ActA開始回顧其他數據並再次調用ActB。所以我的應用程序崩潰。

如何禁止ActA第二次啓動?

+0

您應該使用一個接口來傳遞數據,或通過意圖傳遞數據,而不是這樣做。 – Anmol

+0

'問題在於:ActB擴展了ActA,因爲它需要ActA回收數據來執行他的任務。「呃,確實是這個問題。您應該將該參數傳遞給'ActB'而不是延長'ActA'。 – azizbekian

+0

你可以發佈你的活動嗎? – Johny

回答

1

如果你不想在Activity之間交換數據,你可以這樣做。
創建一個像這樣的基地活動:)

class BaseActivity extends Activity{ 
     String data; 
    } 

    Now class ActA extends BaseActivity{ 
    //you can put value to data directly 
    data="ABCD"; 
    } 

    class ActB extends BaseActivity{ 
    //Here you can access the data string directly 
    } 
+0

現在我要去試試這個答案,謝謝 –

+0

現在,這個答案解決了我的問題;) –

0

您可以從ActA的通過意圖通過您檢索到的數據ACTB,這樣

Intent i = new Intent(getActivity(), ActB.class); 
i.putExtra("String1", "foo"); 
i.putExtra("Integer1", "1337"); 
startActivity(i); 

,然後在你的ACTB你reviece這樣的數據:

Intent i = getIntent(); 
String foo = i.getStringExtra("String1"); 
Integer leet = i.getStringExtra("Integer1"); 

如果你想要傳遞一個自定義對象,請參考How to send an object from one Android Activity to another using Intents?

+0

我會嘗試,問題是我需要發送的數據不是簡單的整數或字符串,而是具有服務和特性的BLE設備 –

+0

您忘記提及OP的方法是完全錯誤的。這最多隻有一半答案 –

+0

@ L.Gangemi就像我說:如果你想傳遞一個更大的物體,而不是隻有簡單的變量下單擊答案 – Malik

0

這是發生,因爲ACTB的onCreate()方法是調用超(,它會導致一次又一次地呼喚的ActA的onCreate()方法。所以,最好不要在ActB中延長ActA。 您可以將這些值通過從ActA傳遞給ActB的意圖。

0

首先,你需要刷新你的OOP概念。

正如你所說的ActA更像是一個SplashScreen,所以我想ACTBMainScreen。您不應該使用extendActA創建ActB。它們之間沒有Is-A關係。

這裏的問題:ACTB延伸的ActA,因爲它需要的ActA的檢索的數據來執行它的任務。

由於非常錯誤的原因,您已延長ActA

展望未來,我認爲(因爲你沒有提供任何代碼),你寫這將啓動ACTB的ActAonCreate()方法的代碼,這就是爲什麼這個問題

這創建循環,因爲ActA開始檢索其他數據並再次調用ActB。所以我的應用程序崩潰。

請注意,由於您的結構,一旦ACTB是首次推出,它是一個被檢索的數據,並調用本身而不是的ActA

請刪除繼承和使用Intent.putExtra(key, value)方法(docs)傳遞數據的ActAACTB

例如在的ActA檢索some_data

Intent i = new Intent(ActA.this, ActB.class); 
i.putExtra("some_key", some_data); 
ActA.this.startActivity(i); 

ACTB其中需要

Intent i = getIntent(); 

數據和檢索後從isome_data使用適當的API Intent.get<TYPE>Extra()例如i.getIntExtra("some_key")(docs)

它會工作。

請參閱@馬利克的答案也。

相關問題