我正在使用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>
被调用的活动有一个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。
我正在使用4.1.2构建。
答案 0 :(得分:1)
您需要致电finish()
以在setResult()
之后结束您的活动,以便任何来电者都能收到结果。
如果您只想在不结束此活动的情况下将消息发送回呼叫者,那么您可能希望使用回叫模式或广播。