【问题标题】:onActivityResult in fragment is never called片段中的 onActivityResult 永远不会被调用
【发布时间】:2014-11-06 15:59:09
【问题描述】:

我正在使用 startActivityForResult 从片段调用活动,但是永远不会回调 onActivityResult。我已经寻找可能的解决方案,包括从清单中删除 SingleTask、SingleInstance、NoHistory,但到目前为止没有任何效果。

这是被调用者片段:

public class PickUpButtonFragment extends Fragment {
....
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_pick_up_button, container,
                false);

        ...
        pickUpButton = (Button) view.findViewById(R.id.pickUpButton);
        pickUpButton.setOnClickListener(new OnPickupClickListener());
...
        return view;
    }
....
    private class OnPickupClickListener implements OnClickListener {
        @Override
        public void onClick(View view) {
            Intent qrCodeActivityIntent = new Intent(getActivity(), QrCodeActivity.class);
            startActivityForResult(qrCodeActivityIntent, 20);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // Check which request we're responding to
        if (requestCode == 20) { 
            qrCodeValue = data.getStringExtra(QrCodeActivity.QR_CODE_FLAG);
            requestDeviceLocation();
        }
    }
...
}

片段包含在我覆盖 onActivityResult 的活动中

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
}

这是在清单中声明活动的方式:

<activity
    android:name=".activity.GMapActivity"
    android:label="@string/map_title"
    >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>

    <meta-data
        android:name="android.app.searchable"
        android:resource="@xml/searchable" />
</activity>

被调用的activity有一个setResult方法:

public class QrCodeActivity extends Activity {

...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qr_code);
.....   
        initPickUpRequestButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent data = new Intent();
                data.putExtra(QR_CODE_FLAG, qrCodeValue);
                setResult(RESULT_OK,data);
            }
        });

...
    }
....
}

这是在清单中声明被调用活动的方式:

<activity
    android:name=".activity.QrCodeActivity"
    android:label="@string/qr_code_title"
    >
</activity>

setResult 被调用,但 onActivtyResult 永远不会被回调,无论是在父 Activity 还是在 Fragment 中。

我正在使用 4.1.2 构建。

【问题讨论】:

  • setResult 然后finish()...

标签: android android-activity android-fragments


【解决方案1】:

您需要在setResult() 之后调用finish() 来结束您的活动,以便任何调用者都能收到结果。

如果您只想将消息发送回调用方而不结束此活动,那么您可能需要使用回调模式或广播。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多