zoukankan      html  css  js  c++  java
  • Fragment返回Fragment传值

    FragmentA 启动FragmentB ,然后FragmentB做完事情,返回结果给FragmentA

    事例呆木如下:

    先在FragmentA中启动目标FragmentB

    FragmentA fromFragment=new FragmentA();
    FragmentB toFragment=new FragmentB();
    //注意下面这一句,必须要指定目标Fragment
    toFragment.setTargetFragment(fromFragment,100);
    
    //隐藏FragmentA显示FragmentB
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction transaction = fragmentManager.beginTransaction().setTransition(android.R.animator.fade_in);
    transaction.hide(fromFragment)
               .add(R.id.switch_frameLayout, toFragment)
               .addToBackStack(null)
               .commit();

    在目标FragmentB中处理业务

        //自己写个方法,开始返回       
        private void onTakePhotoResult() {
            sendResult(Activity.RESULT_OK);
            getFragmentManager().popBackStack();//从任务栈中弹出
    
        }
    
        private void sendResult(int resultOK) {
            if (getTargetFragment() == null) {
                return;
            } else {
                //把需要返回的数据存放到Intent中
                Intent i = new Intent();
                i.putExtra("photoPath", tempPhotoPath);
                getTargetFragment().onActivityResult(getTargetRequestCode(), resultOK, i);
            }
        }

    FragmentA中重写onActivityResult()方法接收返回的结果数据

     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         super.onActivityResult(requestCode, resultCode, data);
         if (resultCode == Activity.RESULT_OK) {
             //开始接收返回的数据
             String photoPath = data.getStringExtra("photoPath");
         }
     }

    这个可能会遇到一个问题:result回来的结果fragment有可能没收到,这个是因为activity拦截了返回结果。

    由于fragment是寄存在activity中的,那么在fragment返回给fragment值的时候就有可能出现被拦截的情况。这个我也是调试了很久才发现被拦截的。

    解决方法也非常简单,就是在activity的onActivityResult()方法中转发一下结果数据给对应的fragment就好了。具体实现代码如下:

    重写activity的onActivityResult()方法。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       //转发返回的结果给fragment
       fragment.onActivityResult(requestCode,resultCode,data);
    }
  • 相关阅读:
    [Docker] redis 全配置
    Dubbo的负载均衡策略&容错策略
    Dubbo部分知识点总结
    如何win10 上访问虚拟机(linux)上redis方法
    Linux_centOS_5.7_64下如何安装jdk1.8&mysql
    java高级&资深&专家面试题-行走江湖必备-持续更新ing
    springCloud微服务调用失败【CannotGetJdbcConnectionException: Failed to obtain JDBC Connection】
    synchronized、volatile区别、synchronized锁粒度、模拟死锁场景、原子性与可见性
    ThreadLocal什么时候会出现OOM的情况?为什么?
    volatile、ThreadLocal的使用场景和原理
  • 原文地址:https://www.cnblogs.com/zhang-cb/p/6962724.html
Copyright © 2011-2022 走看看