web-dev-qa-db-ja.com

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

Sign upLocationなど、多くのアクティビティから呼び出すことができるOrderアクティビティがあります。 Locationアクティビティでは、ユーザーが自分の場所を入力します。そのため、アクティビティLocationは、この新しい場所を呼び出したアクティビティに返します。

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

注意

コードを投稿する必要があることを教えてくれることは知っていますが、コードの提供をお願いしているわけではありません。いくつかのヒント、リンク、または良いスレッドが欲しいだけです。

101
user user

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

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");
        }
    }
}
214
Kanth

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

例えば:

...
if (everything_OK) {
    setResult(1); // OK!
    finish();
}
else {
   setResult(-1); // some error ...
   finish();
}
...

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

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

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

1
lenooh