首页 > 其他分享 > 25. Activity与Fragment通信

25. Activity与Fragment通信

时间:2022-09-19 08:11:05浏览次数:55  
标签:25 layout String Fragment fragment Activity public

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);

在这里插入图片描述

在fragment中

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

在这里插入图片描述

运行

在这里插入图片描述

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

在这里插入图片描述

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="数据传递"
    />

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

private IFragmentCallBack fragmentCallBack;
public void setFragmentCallBack(IFragmentCallBack callBack){
    fragmentCallBack = callBack;
}

@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;
}

 

在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;
    }
});

在这里插入图片描述

运行

在这里插入图片描述

同理,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";
    }
});

在这里插入图片描述

运行

在这里插入图片描述

成功

25.4 其他方案

eventBus、LiveData

【观察者设计模式】

【发布订阅】

 

标签:25,layout,String,Fragment,fragment,Activity,public
From: https://www.cnblogs.com/55zjc/p/16706488.html

相关文章

  • Insertion or Heap Sort (25)
    题目描述AccordingtoWikipedia:Insertionsortiterates,consumingoneinputelementeachrepetition,andgrowingasortedoutputlist.Eachiteration,inserti......
  • 2022-2023-1 20221325 《计算机基础与程序设计》第三周学习总结
    作业信息班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#JXJC作业目标:数字分类与计数法位......
  • 【Azure 应用服务】Azure Durable Function(持久函数)在执行Activity Function时候,因
    问题描述在使用AzureDurableFunction函数,调用函数链模式来调用多个ActivityFunction。函数链:https://docs.azure.cn/zh-cn/azure-functions/durable/durable-function......
  • ili9325屏幕横屏竖屏方向
    首先这个屏幕默认就是竖着的,他的240方向排列着子像素 是行扫描方向 有三个寄存器会影响显示的扫描顺序//R1是SS:选择源极驱动器输出的移位方向。这里以竖屏,......
  • 第 25 题:浏览器和 Node 事件循环的区别
    先上链接:浏览器与Node的事件循环(EventLoop)有何区别?html#event-loopsNode.js事件循环,定时器和process.nextTick()第一个链接里面大佬讲的已经非常透彻了我来总......
  • DAY 252 Python定时任务
    在日常工作中,我们常常会用到需要周期性执行的任务,一种方式是采用Linux系统自带的crond结合命令行实现。另外一种方式是直接使用Python。接下来整理的是常见的Python定......
  • PAT Advanced 1032 Sharing(25)
    题目描述:TostoreEnglishwords,onemethodistouselinkedlistsandstoreawordletterbyletter.Tosavesomespace,wemayletthewordssharethesames......
  • 2022-9-6 #25 None
    这是否也算一种闲话。受到音游的影响,最近一个月都没咋做题,也没更博。我的评价是......
  • appium安装apk包,返回package、activity
    fromappiumimportwebdriverdefget_app_info(apk):"""dinghanhua2022-09:paramapk_path:apk路径,不要包含中文:return:package,activity......
  • CF1325F Ehab's Last Theorem
    传送门思路dfs树的一道出色的应用题令\(k=\lceil\sqrtn\rceil\)我们先按照遍历的顺序构建出dfs树对于一条返祖边\((u,v)\),如果有\(dep_u-dep_v+1\gek\),......