在 startActivityForResult() 之后未调用 onActivityResult() Intent.ACTION_GET_CONTENT
onActivityResult() not called after startActivityForResult() with Intent.ACTION_GET_CONTENT
我得到了包含不同 Fragment
的主 Activity
,一个片段让用户可以打开 DialogFragment
。该对话框打开一个声音文件列表,该对话框还包含一个 'Add' 按钮,用户应该可以从该按钮添加她自己的声音文件。为此,我想使用标准 Android 文件选择功能并利用 Intent.ACTION_GET_CONTENT
。因此,当用户按下 'Add' 按钮并且 Android 文件选择功能正常出现时,我消除了这个意图,但是当我选择一个文件时,什么也没有发生。我希望我的主要 activity 的 onActivityResult()
被触发,但它没有,我无法让它工作,我不明白为什么这不起作用。
public class MyDialog extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Rest omitted...
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle(R.string.TONE_PROMPT_TITLE)
.setNeutralButton(R.string.ADD, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("audio/mpeg");
getActivity().startActivityForResult(intent, ADD_SOUND_REQUEST_CODE);
}
})
.create();
}
}
我还尝试通过以下方式实例化意图:
Intent intent = new Intent(getActivity(), MyActivity.class);
但这也不管用。
任何想法都会很有帮助,谢谢!
在包含片段的 activity 中执行此操作
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
MyFragment fragmentObject = getSupportFragmentManager().findFragmentById(R.id.container);
fragmentObject.onActivityResult(requestCode, resultCode, data);
}
然后 onActivityResult()
在你的片段中将被调用。
在片段中,您通常会使用 this.startActivityForResult(...)
并覆盖片段的方法 onActivityResult(...)
。由于您的情况是 DialogFragment
这将毫无用处,因为在按下其中一个按钮后对话框将被销毁。
这意味着您正确地调用了 getActivity().startActivityForResult(...)
,但是由于调用者是 activity,因此 activity 是必须实现 onActivityResult(...)
方法的那个。采用这种方法时没有片段收到回调。
设法找出问题所在...
在我的清单中,我已将 Activity
声明为 android:noHistory="false"
,这就是问题所在。在为我的 activity 将其设置为 android:noHistory="true"
并按照以下方式触发我的 Intent
后,它就像一个魅力。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/mpeg");
getActivity().startActivityForResult(intent, ADD_SOUND_REQUEST_CODE);
就这样,我的 activity 中的 onActivityResult()
被触发了,之后我听从了 @Rohit5k2 关于如何获取我的 Fragment
的 OnActivityResult 的建议() 触发,一切都非常好!
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
MyFragment fragmentObject = getSupportFragmentManager().findFragmentById(R.id.container);
fragmentObject.onActivityResult(requestCode, resultCode, data);
}
感谢大家的帮助!
我得到了包含不同 Fragment
的主 Activity
,一个片段让用户可以打开 DialogFragment
。该对话框打开一个声音文件列表,该对话框还包含一个 'Add' 按钮,用户应该可以从该按钮添加她自己的声音文件。为此,我想使用标准 Android 文件选择功能并利用 Intent.ACTION_GET_CONTENT
。因此,当用户按下 'Add' 按钮并且 Android 文件选择功能正常出现时,我消除了这个意图,但是当我选择一个文件时,什么也没有发生。我希望我的主要 activity 的 onActivityResult()
被触发,但它没有,我无法让它工作,我不明白为什么这不起作用。
public class MyDialog extends DialogFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Rest omitted...
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_info)
.setTitle(R.string.TONE_PROMPT_TITLE)
.setNeutralButton(R.string.ADD, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("audio/mpeg");
getActivity().startActivityForResult(intent, ADD_SOUND_REQUEST_CODE);
}
})
.create();
}
}
我还尝试通过以下方式实例化意图:
Intent intent = new Intent(getActivity(), MyActivity.class);
但这也不管用。
任何想法都会很有帮助,谢谢!
在包含片段的 activity 中执行此操作
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
MyFragment fragmentObject = getSupportFragmentManager().findFragmentById(R.id.container);
fragmentObject.onActivityResult(requestCode, resultCode, data);
}
然后 onActivityResult()
在你的片段中将被调用。
在片段中,您通常会使用 this.startActivityForResult(...)
并覆盖片段的方法 onActivityResult(...)
。由于您的情况是 DialogFragment
这将毫无用处,因为在按下其中一个按钮后对话框将被销毁。
这意味着您正确地调用了 getActivity().startActivityForResult(...)
,但是由于调用者是 activity,因此 activity 是必须实现 onActivityResult(...)
方法的那个。采用这种方法时没有片段收到回调。
设法找出问题所在...
在我的清单中,我已将 Activity
声明为 android:noHistory="false"
,这就是问题所在。在为我的 activity 将其设置为 android:noHistory="true"
并按照以下方式触发我的 Intent
后,它就像一个魅力。
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("audio/mpeg");
getActivity().startActivityForResult(intent, ADD_SOUND_REQUEST_CODE);
就这样,我的 activity 中的 onActivityResult()
被触发了,之后我听从了 @Rohit5k2 关于如何获取我的 Fragment
的 OnActivityResult 的建议() 触发,一切都非常好!
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
MyFragment fragmentObject = getSupportFragmentManager().findFragmentById(R.id.container);
fragmentObject.onActivityResult(requestCode, resultCode, data);
}
感谢大家的帮助!