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);
    }
  • 相关阅读:
    SQL语句调优
    Oracle start with connect by prior
    博客园如何转载博客
    初遇java.lang.NoClassDefFoundError
    二叉搜索树、B树、B+树、B*树
    初见POJO
    win10系统Myeclipse装载tomcat7.0x遇见的新问题
    Myeclise新导入项目遇到的红色感叹号和红色叉问题
    SSM框架中文乱码解决方案
    第五天
  • 原文地址:https://www.cnblogs.com/zhang-cb/p/6962724.html
Copyright © 2011-2022 走看看