• 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

    【观察者设计模式】

    【发布订阅】

  • 相关阅读:
    java计算机毕业设计基于Web的上门家教系统的设计与实现源程序+mysql+系统+lw文档+远程调试
    rpc入门笔记0x01
    活动安排问题(贪心算法)
    如果你有一次自驾游的机会,你会如何准备?
    java面试题超详细讲解整理总结分析【java基础】
    Java笔记:阻塞队列
    反片语 set+哈希表 就C++代码而言,我很短
    ​软考-高级-信息系统项目管理师教程 第四版【第16章-项目采购管理-思维导图】​
    insertAdjacentHTML() 作用
    Docker,安装部署Nginx
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126259079