美文网首页
一次搞懂Activity和Fragment之间的通信方式

一次搞懂Activity和Fragment之间的通信方式

作者: lang_un | 来源:发表于2019-02-25 09:59 被阅读2次

    一、Activity->Activity

    1.Intent

    通过Intent携带需要的信息,但要注意,intent对携带写信的大小有限制,传递对象要实现序列化接口
    startActivity()
    startActivityForResult()
    

    2.Broadcast或者LocalBroadcast或者EventBus

    在A中发出广播,在B中接收广播并解析其中数据
    

    3.用数据存储的方式

    理论上凡是数据存储的方式,我们均能在A存储信息,并在B读取,达到通信的目的
    SharedPreference
    SQLite
    File
    Android剪切板等
    

    4.使用静态变量

    在A中将静态变量赋值,在B中读取并置空
    

    二、Activity->Fragment

    在Activity中:

        // 步骤1:获取FragmentManager
        FragmentManager fragmentManager = getFragmentManager();
    
        // 步骤2:获取FragmentTransaction
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
        // 步骤3:创建需要添加的Fragment 
        final mFragment fragment = new mFragment();
    
        // 步骤4:创建Bundle对象
        // 作用:存储数据,并传递到Fragment中
        Bundle bundle = new Bundle();
    
        // 步骤5:往bundle中添加数据
        bundle.putString("message", "I love Google");
    
        // 步骤6:把数据设置到Fragment中
        fragment.setArguments(bundle);
    
        // 步骤7:动态添加fragment
        // 即将创建的fragment添加到Activity布局文件中定义的占位符中(FrameLayout)
        fragmentTransaction.add(R.id.fragment_container, fragment);
        fragmentTransaction.commit();
    

    在Fragment中

      // 步骤1:通过getArgments()获取从Activity传过来的全部值
      Bundle bundle = this.getArguments();
    
      // 步骤2:获取某一值
      String message = bundle.getString("message");
    

    三、Fragment->Activity

    定义一接口

    public interface ICallBack {
       void get_message_from_Fragment(String string);
    }     
    

    在Fragment中

     // 设置 接口回调 方法
    public void sendMessage(ICallBack callBack){
        callBack.get_message_from_Fragment("消息:我来自Fragment");
    }
    

    在Activity中

     // 步骤1:获取FragmentManager
     FragmentManager fragmentManager = getFragmentManager();
    
     // 步骤2:获取FragmentTransaction
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    
     // 步骤3:创建需要添加的Fragment 
     mFragment fragment = new mFragment();
    
     // 步骤4:动态添加fragment
     // 即将创建的fragment添加到Activity布局文件中定义的占位符中(FrameLayout)
     fragmentTransaction.add(R.id.fragment_container, fragment);
     fragmentTransaction.commit();
        
        
     // 通过接口回调将消息从fragment发送到Activity
     fragment.sendMessage(new ICallBack() {
           @Override
        public void get_message_from_Fragment(String string) {
                 String msg = string;
        }
     });
    

    四、Fragment->Fragment

    在Fragment1中

     public String getMessage() {
        return “你好”;
    }
    

    在Fragment2中

     Fragment1 cf = (Fragment1) getActivity()
                            .getFragmentManager().findFragmentById(R.id.content_fg);
     String msg = cf.getMessage();
    

    END~~

    相关文章

      网友评论

          本文标题:一次搞懂Activity和Fragment之间的通信方式

          本文链接:https://www.haomeiwen.com/subject/mkrwyqtx.html