4

Ok、

そこで、UI要素のライブラリプロジェクトを作成しています。ライブラリには、Androidのアクションバーの下位互換性ライブラリであるActionBarSherlockに基づくいくつかのアクティビティがあります。これらのアクティビティでは、ライブラリプロジェクトで使用しているアクティビティに関係なく、ユーザーを家に連れて行くボタンをアクションバーに配置したいと思います。

いくつかの用語。「ライブラリ」とは、私が取り組んでいるAndroidUIライブラリプロジェクトを指します。「アプリケーション」とは、開発者がライブラリを含めて使用している可能性のあるすべての顧客を指します。

通常、アクティビティを作成して別のアクティビティに電話をかけたい場合は、次のようにします。

intent = new Intent(this, WhateverMyActivityName.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

十分に単純です。しかし、ここに注意が必要です。Androidライブラリは、どのアプリケーションがそれらを使用しているかについてほとんど、またはまったく知識がありません。したがって、「WhateverMyActivityName.class」は、開発者アプリケーションがアクティビティと呼ぶものを予測する方法がないため、役に立ちません。

交換する必要があります

intent = new Intent(this, WhateverMyActivityName.class);

このようなもので

intent = new Intent(this, getApplication().MainActivity().getClass());

または、アプリケーションのメインアクティビティを呼び出す何らかのインテントアクションを使用する可能性があります(Intent.ACTION_MAIN or Intent.CATEGORY_LAUNCHER)

つまり、ライブラリプロジェクトからアプリケーションのメインアクティビティを取得するにはどうすればよいですか?

4

3 に答える 3

11

リフレクションを使用してクラス オブジェクトを取得できます。

Class.forName("com.mypackage.myMainActivity")

このコードをライブラリ プロジェクトに追加して呼び出します。

try {
      Intent myIntent = new Intent(this,Class.forName("com.mypackage.myMainActivity"));
      startActivity(myIntent );
} catch (ClassNotFoundException e) {
     e.printStackTrace();
}

「com.mypackage.myMainActivity」はメイン プロジェクトに存在するアクティビティであり、ライブラリ プロジェクトから呼び出す必要があります。

于 2014-12-11T06:41:38.243 に答える
2

アプリケーションは、Intent呼び出される を提供するか、Class呼び出されるアクティビティの を提供するライブラリ内のメソッドを呼び出します。ライブラリはそれをどこかに保存して使用します。

正しい答えが「Intent.ACTION_MAIN または Intent.CATEGORY_LAUNCHER」であるというあなたの仮定は不正確かもしれません。たとえば、一部のアプリにはスプラッシュ スクリーン アクティビティがあり (これはそれ自体が問題ですが、それは問題ではありません)、アプリ内のホーム アフォーダンスが移動する場所ではありません。

于 2012-09-21T11:38:08.103 に答える
0

この投稿に記載されているコードを使用して、アクティビティのリストを取得できます。その後、resolveinfoをループし、インターネットフィルタをチェックして、目的のインテントアクションを含むアクティビティを見つけます。

于 2012-09-21T11:42:23.360 に答える