Android:アクティビティがそれを呼び出すアクティビティに結果を返すようにする方法?


128

私が持っているLocationなど、多くの活動から呼び出すことができる活動Sign upとはOrder。でLocation活動ユーザは、自分の場所を入力し、その活動はLocationそれを呼ばれるその活動に、この新しい位置を返します。

したがって、Sign upアクティビティがアクティビティを呼び出すとLocation、データをSign upアクティビティに返す必要があります。別の時には、Orderアクティビティは同じことを行います。

注意

私がコードを投稿するように言われるのはわかっていますが、コードを教えてもらえません。ヒント、リンク、または良いスレッドが欲しいだけです。


あなたは背中に仕上げ()の呼び出しを使用することができます。..
Harshid


@Harshidあなたはより多くの詳細が喜ば私に与える、またはあなたがいただければ幸いですリンクしている場合
ユーザーのユーザー

回答:


253

呼び出し元のアクティビティに結果を返すはずのアクティビティを開始するには、次のようなことを行う必要があります。開始したアクティビティから結果が得られたことを識別するために、以下に示すようにリクエストコードを渡す必要があります。

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

アクティビティではsetData()、結果を返すために利用できます。

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

したがって、最初のアクティビティで、onActivityResult()に以下のコードを記述します

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

コメントに基づいて編集: 3つの文字列を返したい場合は、Uriを使用する代わりに、意図的にキーと値のペアを使用してこれに従ってください。

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

以下のようにonActivityResultで取得します。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}

何て言ったの?私はあなたの最後のコメントを理解できません、申し訳ありませんが私は英語が上手ではありません、私は今あなたのコードを試しています、requestcodeどんな整数を置けますか?
ユーザーユーザー

1
私は問題なし(NP)と言ったので、これを実装するのが遅いかもしれないと言ったので、私は自分の時間をかけてコメントするよう通知しました。requestcodeに入ると、はい、int requestCode = 1のような整数値を指定できます。
Kanth 2013

はい、それは正しく機能します。私はあなたの答えを受け入れます。ありがとうございました。文字列を送信するだけでなく、「都市」、「ストリート」、「ホーム」、文字列にラベルを付ける方法はありますか?
ユーザーユーザー

あなたがしたい場合は、あなたの答えは非常に多くのユーザーがそれを検索することができ、タイトル、編集、非常に優れている
ユーザーのユーザー

私は方法を探していた意図を作成するnew Intent(this, OtherActivity.class);私は活動にこのコードを使用することができます。
ユーザー

3

終了してresultCode(データなしで)を追加するだけの場合は、setResult(int resultCode)before を呼び出すことができますfinish()

例えば:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

次に、呼び出しアクティビティでをチェックしてresultCode、問題がないかどうかを確認します。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

でアクティビティを呼び出すことを忘れないでくださいstartActivityForResult(intent, someCustomRequestCode)


4
の値Activity.RESULT_OK-1、誰かを混乱させる場合に備えて、実際にはです。Activity定数の使用をお勧めします
jacoballenwood
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.