片段内部未调用 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?

onActivityResult 不会从 viewPager 片段调用

Fragment 中的 onActivityResult 从未调用过