• Android学习笔记 25. Activity与Fragment通信


    Android学习笔记

    Android基础开发——Fragment

    25. Activity与Fragment通信

    25.1 Activity与Fragment通信

    原生方案:Bundle

    在这里插入图片描述

    如何让Activity和BlankFragment1完成通信

    Activity中:

    //定义一个bundle
    Bundle bundle = new Bundle();
    //放入数据,构建bundle
    bundle.putString("message","dingjiaxiong");
    //构建一个blankfragment
    BlankFragment1 bf = new BlankFragment1();
    //放入bundle
    bf.setArguments(bundle);
    
    //进行切换
    replaceFragment(bf);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    在fragment中

    //获取bundle
    Bundle bundle = this.getArguments();
    //获取数据
    String s = bundle.getString("message");
    Log.e("dingjiaxiong", "onCreate: " + s);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    运行

    在这里插入图片描述

    25.2 动态添加Fragment的过程总结
    1. 创建一个待处理的fragment
    2. 获取fragmentManager,一般通过getSupportFragmentManager()
    3. 开启一个事务transaction,一般调用fragmentManager的beginTransation()
    4. 使用transaction进行fragment切换
    5. 提交事务

    在这里插入图片描述

    25.3 Activity与Fragment通信方案:Java接口

    Java中类与类自己通信的常用方案:接口

    定义接口

    package com.dingjiaxiong.myfragmentmanagers;
    
    public interface IFragmentCallBack {
    
    
        void sendMsgToActivity(String string);
    
        String getMsgFromActivity(String msg);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    修改fragment布局

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn3"
        android:layout_gravity="center"
        android:text="数据传递"
        />
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    在Fragment中定义对象并在Oncreate生命周期中实现发送消息

    private IFragmentCallBack fragmentCallBack;
    public void setFragmentCallBack(IFragmentCallBack callBack){
        fragmentCallBack = callBack;
    }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
    
        if(rootView == null){
            rootView = inflater.inflate(R.layout.fragment_blank1, container, false);
        }
        Button button = rootView.findViewById(R.id.btn3);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                fragmentCallBack.sendMsgToActivity("Hello,我来自fragment");
            }
        });
        return rootView;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

    在Activity中调用实现接口

    bf.setFragmentCallBack(new IFragmentCallBack() {
        @Override
        public void sendMsgToActivity(String string) {
            Toast.makeText(MainActivity.this,string , Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public String getMsgFromActivity(String msg) {
            return null;
        }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    运行

    在这里插入图片描述

    同理,fragment从activity中获取消息

    在这里插入图片描述

    bf.setFragmentCallBack(new IFragmentCallBack() {
        @Override
        public void sendMsgToActivity(String string) {
            Toast.makeText(MainActivity.this,string , Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public String getMsgFromActivity(String msg) {
            return "hello ,我来自activity";
        }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    运行

    在这里插入图片描述

    成功

    25.4 其他方案

    eventBus、LiveData

    【观察者设计模式】

    【发布订阅】

  • 相关阅读:
    【让你从0到1学会C语言】指针/数组传参以及static关键字
    javacc之路3---CharStream
    计算机网络题库--第五单元传输层
    Tomcat和HPPT协议
    RK3568 Ubuntu终端无法打开问题
    Java养老护理助浴陪诊小程序APP源码
    【Android从零单排系列九】《Android视图控件——ImageView》
    前端进击笔记第二十三节 前端性能优化与解决方案
    Nacos 注册中心、配置文件中心的常用配置(springcloud)
    数据库事务概述
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126259079