2017-04-19 55 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)

它会工作。

请参阅@马利克的答案也。

相关问题