片段内部未调用 onActivityResult [重复]
Posted
技术标签:
【中文标题】片段内部未调用 onActivityResult [重复]【英文标题】:onActivityResult not called inside fragment [duplicate] 【发布时间】:2018-09-17 03:48:49 【问题描述】:我知道这个问题在堆栈溢出中已经回答了很多次,但没有一个解决方案对我有用。我需要从设备中选择一个 pdf 文件。 startActivityResult() 被调用,我可以选择一个 pdf 文件,但是 onActivityResult 永远不会被调用。奇怪的是它以前可以正常工作,但突然就没有响应了。
MainActivity.java
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
Fragment.java
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )
//do something
@Override
public boolean onOptionsItemSelected(MenuItem item)
ConnectivityManager CM = (ConnectivityManager) getActivity().getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo ninfo = CM.getActiveNetworkInfo();
if (item.getItemId() == R.id.upload_prax && ninfo!=null && ninfo.isConnected() )
if (permissionexternal == PackageManager.PERMISSION_GRANTED)
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/pdf");
fragment.startActivityForResult(intent, PICKFILE_REQUEST_CODE);
【问题讨论】:
显示任何错误或提示?? 你如何开始你的活动(返回结果)? 没什么。我什至调试了应用程序,但没有任何结果! @MohammadAli 抱歉没找到你! @GokulNathKP 你可以尝试重建项目或清理项目吗?@digital_pro 【参考方案1】:在你的片段中,使用
startActivityForResult(intent, PICKFILE_REQUEST_CODE);
而且您不需要为您的活动添加onActivityResult()
。只需删除
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : getSupportFragmentManager().getFragments())
fragment.onActivityResult(requestCode, resultCode, data);
在你的片段中,
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )
//do something
Toast.makeText(getActivity(), "On Activity Result Called", Toast.LENGTH_SHORT).show();
// add toast to check whether it is working or not
【讨论】:
还是一样。吐司没有出现。 就我而言,它有效。你能重建你的项目然后执行它吗 不工作。还是一样。【参考方案2】:您在片段中提出的请求。您可以在设置片段的活动中检索该请求的响应。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICKFILE_REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null )
//do something
此代码应在片段的父活动中。
【讨论】:
还是一样。 那么应该还有其他错误,请尝试逐行调试代码【参考方案3】:在活动中试试这个
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
for (Fragment fragment : getSupportFragmentManager().getFragments())
if (fragment != null)
switch (fragment.getTag())
case "Set your fragment name":
int PICKFILE_REQUEST_CODE = 138;
fragment.onActivityResult(PICK_IMAGE_SINGLE_MULTI, resultCode, data);
break;
【讨论】:
不行! 你得到了什么错误? 没有错误。它像以前一样工作。以上是关于片段内部未调用 onActivityResult [重复]的主要内容,如果未能解决你的问题,请参考以下文章
片段android中未调用onActivityResult [重复]
从片段捕获图像时从不调用onActivityResult [重复]
片段 onActivityResult 方法执行调用活动 onActivityResult
关于片段生命周期,何时调用片段的 onActivityResult?