2011-08-03 18 views
1

私の起動アクティビティは、起動がシングルインスタンスに設定されている別のアクティビティを起動します。この第二の活動では、私は公的な方法を持っています。私は3番目のアクティビティを開始し、そのアクティビティは2番目のアクティビティのパブリックメソッドにアクセスする必要があります。私はonCreateが呼び出される(または間違っていると仮定しているので)startActivityを使用してエクストラを渡したくないので、2番目のアクティビティが再初期化されないようにする必要があります。Android:別のアクティビティからのアクティビティへのアクセス方法

startActivit yを使用してアクティビティが開始されたとき、基礎となるクラスインスタンス自体にアクセスでき、単にメソッドを呼び出すことはできますか?

答えて

3

私は実際に単純な解決策を考え出しました。実際には、アクティビティの基本クラスにアクセスできます。まず、アクティビティ2へのパブリックな静的参照を保持するために使用されるクラスを作成します。アクティビティ2が作成されると、そのonCreateメソッドで静的参照に "this"が格納されます。アクティビティ2は、他のアクティビティやオブジェクトで使用できるメソッドとのインタフェースを実装します。保持している静的参照は、このインタフェースのデータ型になります。別のアクティビティがこのアクティビティでメソッドを呼び出すときは、単純にパブリックな静的参照にアクセスしてそのメソッドを呼び出します。これはハックではありませんが、Javaがどのように動作し、まったく正当なものであるかに固有です。

+1

私は間違っている可能性がありますが、そうすることでコンテキストリークが発生するようです。 –

0

startActivityを使用して開始されたアクティビティオブジェクトへのアクセスを直接取得することはできません(ハッキングを使用しないで)。そして、率直に言って、これを達成しようとすべきではありません。

1つのアクティビティコンポーネントは、複数のアクティビティJavaオブジェクトを循環させながら循環できます。たとえば、ユーザーが画面を回転すると、古いオブジェクトは破棄され、新しいアクティビティオブジェクトが作成されます。しかしこれはまだ1つのアクティビティコンポーネントです。

私の経験から、あなたが記述したことを行う必要があるとき、あなたのアーキテクチャに何か問題があります。アクティビティの責任の一部をServiceまたはContentProviderに移動するか、Intentsなどを使用する必要があります。詳細を知ることなく、より具体的なものを推薦することは難しいです。

1

それは良い考えではありません。 2番目のアクティビティのメソッドは、特定のアクティビティに実際には接続されていませんが、別のアクティビティから呼び出すことができます。したがって、メソッドを他の(非アクティビティ)クラス(多分静的メソッド)に持ち帰り、両方のアクティビティからそれを使用します。

0

いいえstartActivity()で参照を渡す方法はありませんが、何らかの共有メモリを使用してアクティビティへの参照を保持できます。おそらく、これは悪い設計です。ただし、インテントで余分を渡してもonCreateは発生しません。これはライフサイクルに完全に関連しています。

関連する問題