我的主要活动会在列表视图中打开一个包含2个项目的对话框片段。单击其中任何一个都会启动一个新活动。除非我使用getActivity()。startActivityForResult(),否则onActivityResult的代码永远不会运行。我在这里读到的所有内容都不鼓励使用getActivity()。startActivityForResult()并且只是使用startActivityForResult()。通常情况下,我会说“无关紧要,代码有效”,但它让我疯狂,为什么它如此沮丧以及为什么没有getActivity()它就无法工作。我一直在倾注文档,无法找到答案,帮助我stackoverflow,你是我唯一的希望。
我的onActivityResult()代码位于我的主要活动(Landing.class)中:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
String s = "";
Session current = new Session();
Gson gson = new Gson();
if (resultCode == RESULT_OK) {
if (requestCode == 1) {
s = data.getStringExtra("SESSION_JSON");
current = gson.fromJson(s, Session.class);
}
}
sessions.add(current);
adapter.notifyDataSetChanged();
}
调用位于我的DialogFragment类中的startActivityForResult()的代码:
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
dismiss();
if (position == 0) {
Intent intent = new Intent(getActivity(), ActiveSessionActivity.class);
getActivity().startActivityForResult(intent, 1);
}
}
ActiveSessionActivity类中的代码应该在我的主要活动中将结果返回给onActivityResult():
public void saveSession(View v) {
Session session;
Gson gson = new Gson();
String json = gson.toJson(session);
Intent intent = new Intent();
intent.putExtra("SESSION_JSON", json);
setResult(RESULT_OK, intent);
finish();
}
答案 0 :(得分:1)
Android DialogFragments仍然是片段,因此从对话框中调用startActivityForResult实际上会在对话框中获得结果。如果你要在DialogFragment中实现onActivityResult,你将得到你的回调。不建议使用getActivity()。startActivityForResult()的原因是因为对话框无法控制活动,因此可能不再附加它。尝试...
if (getActivity() != null && !isDetached() && !isRemoving()) {
getActivity().startActivityForResult(...);
}