【问题标题】:onActivityResult not called inside fragment [duplicate]片段内部未调用 onActivityResult [重复]
【发布时间】: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

标签: android


【解决方案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;
                }
            }
        }

【讨论】:

  • 不行!
  • 你得到了什么错误?
  • 没有错误。它像以前一样工作。
猜你喜欢
  • 1970-01-01
  • 2013-12-02
  • 2011-09-03
  • 2019-12-05
相关资源
最近更新 更多