4

あちこち検索したところ、同様の投稿がありますが、解決策が見つかりません!

私の状況では、 を保持するアクティビティ A がありfragment、そこからいくつかの値を に返すfragment新しい B を開始したいと考えています。Activityfragment

上でfragment

startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);

Bで、Activityデータを返す

Intent returnIntent = new Intent();
returnIntent.putExtra(SerializationConstants.isSearchSaved, mAbItemsShown.ordinal());
setResult (ConstantsUtils.SUCCESS_RETURN_CODE, returnIntent);
finish();

フラグメントについて

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

switch (requestCode) {

    case ConstantsUtils.TOMAP_REQUEST_CODE:

            if (resultCode == ConstantsUtils.SUCCESS_RETURN_CODE) {
              //do some stuff 
            }
    }
}

onActivityResultfromfragmentは正常に呼び出され、権利はありますrequestCoderesultCode常に 0 であり、インテントは常にnullです。

Aの下には他のonActivityResult実装はありません。Activity

実際、私もwith activityから始めてA に実装しようとしましたが、同じことが起こります。fragmentgetActivity().startActivityForResult(mapIntent, ConstantsUtils.TOMAP_REQUEST_CODE);onActivityResultActivityrequestCoderesultCodeintent

私は を使用してSherlock Action Barいるので、私fragmentはを使用しているので、SherlockListFragmentを使用していsupport library (r18)ます。

手伝って頂けますか?ありがとう

4

2 に答える 2

13

結果コード 0 はRESULT_CANCELLEDです。

The resultCode will be RESULT_CANCELED if the activity explicitly returned that, didn't return any result, or crashed during its operation.

また、このコードを取得する一般的な理由は、新しいタスクでアクティビティを起動することです (新しいタスクの開始につながるフラグのインテントとマニフェストを確認してください)。

また、親アクティビティがある場合は、その子の結果コードを設定するのではなく、その結果コードを設定する必要があります ( getParentnull でない場合は、結果コードを設定するよりも試してください)。

于 2013-08-29T13:46:51.980 に答える
7

しばらく時間をかけて原因を探りました。私の間違いはメソッドに入れられsuper.onBackPressed()ましたonBackPress()

メソッドを呼び出しfinish()ました。しかし、自動的super.onBackPressed()に呼び出されると思うので、常にresultCode 0を取得します。したがって、メソッド内の行を削除するだけです。finish()super.onBackPressed()onBackPressed()

于 2017-01-19T15:57:18.090 に答える