8

私には2つのアクティビティがあり、それぞれが別々のアプリケーションにあります。Activity1には、ユーザーがクリックできるボタンがあり、onClick()メソッドのインテントを使用して2番目のアクティビティを呼び出します。

Intent myIntent = getPackageManager().getLaunchIntentForPackage(com.myProject.Activity2);
startActivityForResult(myIntent, 600);

これにより、Activity1からActivity2が正しく起動されますが、リターンインテントを設定した場所ではなく、Activity2で呼び出されるonActivityResult前にActivity1で呼び出されます。onCreateonBackPressed()

Activity2のonCreateメソッドは次のとおりです。

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

onBackPressedActivity2のメソッドの現在のバージョンは次のとおりです。

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("Stuff", someStuff);

    if(getParent()==null){
        setResult(Activity.RESULT_OK, intent);
    }else{
        getParent().setResult(Activity.RESULT_OK, intent);
    }
    finish();
    super.onBackPressed();
}

私のAndroidManifest.xmlには、Activity2用の次のインテントフィルターがあります。

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

私はここでアドバイスされているように自分launchModestandard(ではなく)であることを確認し、ここで警告されているようにリクエストコードが負ではないことを確認しました。私も試してみましたが、それもダメでした。singleTaskandroid:launchMode="singleTop"

finish()また、ここで説明したようにonBackPressed()Activity2を呼び出さずに(ここsuper.onBackPressed()でも提案されているように)、ここで提案されているように再度呼び出してみまし

また、この人intent.putExtra("Stuff", someStuff);に迷惑をかけているようで、コメントアウトしてみました。

私が間違っているかもしれないことについて何か考えはありますか?

4

3 に答える 3

10

それで、これがそれを処理した最終的な解決策です:

Activity1のインテントを次のように変更しました。

Intent myIntent = new Intent();
myIntent.setClassName("com.myProject", "com.myProject.Activity2");
startActivityForResult(myIntent, 600);

何らかの理由で、Androidでは、最初のパラメーターで指定されたパッケージ名に加えて、2番目のパラメーターに完全修飾名が必要です。今それは動作します!:)

于 2012-04-09T15:44:17.620 に答える
1

アクティビティの起動時に「singleInstance」フラグが設定されている場合に発生します。

于 2013-10-17T12:30:05.097 に答える
0

あなたの問題が何であるかわからない。Activity1でインテントを作成する方法は奇妙です。このメソッドは、同じアプリで別のアクティビティを起動するインテントを作成するためのものではありません。一部の開発者は、Intent(Context、Class <>)コンストラクターを使用します。私は、自分のアプリでのみ定義されたカスタムアクション文字列でIntent(String action)を使用することを好みます(正しくコーディングする方が簡単です)。

また、Activity2に指定したインテントフィルターは、通常、ホーム画面から直接起動されるアクティビティに使用されます。

activity2のonCreate()コードはどこにありますか?onBackPressed()のコードはどこにありますか?setResult()がActivity2の他のコードの前に呼び出されることを私に証明できますか?デバッグでアクティビティを実行する必要があります。Activity2が必要と思われるインテントを受信して​​いることを確認してから、setResult()まで実行されるステートメントを段階的にトレースします。根本的な問題が何であるかを理解する前に、コードに解決策を投げてはいけません。

これまでのところ、Activity1がIntentを送信してから、onActivityResultが呼び出されています。これまでのところ、他に何も証明されていません。

于 2012-04-06T20:59:15.013 に答える