2017-04-19 11 views
0

私が開発しているアプリケーションでは、アクティビティがであり、ActAActBです。新しいアクティビティへの移行中にアクティビティが再作成されます

ActAが最初に表示されます。

ActAはSplashScreenのように機能します。このActAインサイド

私はいくつかのタスクを実行するためのACTBに必要ないくつかのデータをretrive。

このデータが取得されると、私は、ActBに切り替えるインテントを呼び出すことができます。それはこのActAが彼のタスクを実行するために、データをretrived 必要becouse ACTBのActAを拡張:

は、ここで問題です。おそらくそれのbecouse

は、一瞬にしACTBは、のActA方法呼び出され "OnCreate関数" に呼び出されます。

これはループを作成します。ActAが他のデータの取得を再開し、ActBを再度呼び出します。だから私のアプリクラッシュ。

ActAの2回目の起動を禁止しますか?あなたがしたい場合

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

+0

データを渡す代わりにインターフェイスを使用して、データをインテントで渡す必要があります。 – Anmol

+0

'問題があります:ActBはActAを拡張し、タスクを実行するためにActAの取得されたデータが必要です。'まあ、確かに問題です。そのパラメータを 'ActB'に渡し、' ActA'を拡張しないでください。 – azizbekian

+0

アクティビティを投稿できますか? – Johny

答えて

1

アクティビティ間でデータを交換したくない場合は、これを行うことができます。
はこのような基本アクティビティを作成します。

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

あなたはこの

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

のように、意図経由のActAからACTBにあなたの取得したデータを渡すことができ、その後、あなたのACTBであなたは、このようなデータをrevieceカスタムオブジェクトを渡す場合はHow to send an object from one Android Activity to another using Intents?

+0

私は、問題は、送信する必要があるデータが単純な整数や文字列ではなく、BLEデバイスがサービスと特性であることです。 –

+0

OPのアプローチが完全に間違っていることを忘れてしまいます。これは最大でも半分の答えです –

+0

@ Lです。Gangemiのように言った:より大きなオブジェクトを渡したい場合は、単純なvariblesだけでなく、答えの末尾にあるリンクをクリックして – Malik

0

これが起こっているACTBののonCreate()メソッドは、super()を呼び出しているので、それが何度も何度もこのActAののonCreate()メソッドを呼び出してしまいます。 ActBをActBに拡張しないほうがよいでしょう。 これらの値は、ActAからActBに渡されたインテントで渡すことができます。

0

まず、OOPの概念をブラッシュアップする必要があります。

あなたはのActAがよりSplashScreenのようなものですので、私はACTBMainScreenであると仮定言ったように。あなたはActBを作成するためにextendActAしないでください。それらの間にはIs-Aの関係はありません。

は、ここで問題です:それはタスクを実行するためだのActAの取得したデータを必要とするためACTBのActAを拡張します。

非常に間違った理由でActAを延長しました。今後

、私はなぜ問題が

このことはだ、あなたはのActAonCreate()方法でACTBを開始し、コードを書かれていることを(あなたが任意のコードを提供していないとして)を想定ActAが他のデータの取得を開始してからもう一度ActBとループするのでループが作成されます。だから私のアプリケーションがクラッシュします。

ACTBが初めて起動されると、それがデータを取得し、それ自体なくのActAを呼び出すされているものである。、原因あなたの構造に、注意してください

継承を削除し、ACTBのActAからのデータを渡すためIntent.putExtra(key, value)方法(docs)を使用してください。

このActA内のデータが

Intent i = getIntent(); 

を必要とし、取得されたACTB
some_data

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

中を取得した後iからsome_dataは、例えば、適切なAPIを使用してIntent.get<TYPE>Extra()i.getIntExtra("some_key")(docs)

それが動作します。

@マリクの回答も参照してください。

関連する問題