activity与fragment是怎样传递信息的?

activity与fragment的传递信息

1、activity与fragment的关系:

为什么要进行通信呢?首先我们先来看看两者之间是什么关系

From李诗雨—https://blog.csdn.net/cjm2484836553/article/details/105150473

1)fragment是依赖activity存在的,不能独立存在,而activity是fragment的一个容器;
2)一个activity有多个fragment,而一个fragment可以别多个activity重用;
3)fragment有自己的生命周期,能接收输入事件;
4)能在activity运行时可以动态添加或删除fragment。

2、activity与fragment通信bundle方法

activity将信息主动传给fragment——bundle通信。(数据的载体)
1)让activity把消息传给fragment,上次我们新建了一个空白的fragment,在点击按钮时转换到这个fragment。现在在转换前我们先添加一个存放数据的载体bundle,bundle可以传很多数据类型,当要传一个javabean时用putParcelable。构造一个fragment,调用fragment里的Fragment.setArguments(Bundle bundle)来传递参数。 setArguments方法的调用必须要在Fragment与Activity关联之前。(在FragmentTransaction 的commit之前使用)

				Bundle bundle=new Bundle();
                bundle.putString("message","我喜欢安卓");
                BlankFragment01 bf = new BlankFragment01();
                bf.setArguments(bundle);
                replacefragment(bf);`

2)在blankfragment里任何地方获取传的信息bundle。
例如在onCreate方法里获取activity里的信息。

 Bundle bundle=this.getArguments();//伴随着fragment产生的arguments
        //返回的是activity里传进去的bundle
        String string=bundle.getString("message");
        Log.d(TAG, "onCreate: "+string);

在这里插入图片描述

Java语言中类与类通信方案:接口

一、activity接收来自fragment的消息
1)先定义一个接口,在接口里创建两个抽象函数,一个用来将activity的信息给fragment,一个是fragment传送信息给activity。

void sendmsgtoactivity(String msg);
String getmsgfromactivity(String msg);

2)不要Mainactivity里实现一个接口,该接口是一个抽象的接口,无法创建对象。要到blankfragment里面定义一个接口类型对象,并写出一个赋值的公有方法setFragmentCallback。

private IFragmentCallback fragmentCallback;
public void setFragmentCallback(IFragmentCallback iFragmentCallback){
fragmentCallback=iFragmentCallback;
}

3)在activity里可以通过创建fragment的对象时调用赋值的函数,定义一个匿名内部类。

bf.setFragmentCallback(new IFragmentCallback() {
@Override
public void sendmsgtoactivity(String msg) {
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}

@Override
public String getmsgfromactivity(String msg) {
return null;
} });

4)通过button来触发接受消息。在fragment_xml中添加一个button按钮。
5)响应button一般在onResume()中,也可以在onCreateView()里。定义一个View来解析,为防止多次重复解析。添加一个判断如果没有解析过则才解析。然后再返回我们的视图,返回之前绑定button。当点击button时会把消息发给activity。

if(rootview==null) {
rootview = inflater.inflate(R.layout.fragment_blank01, container, false);
}
Button btn=rootview.findViewById(R.id.btn_3);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragmentCallback.sendmsgtoactivity(“Hello this is from fragment”);
}
});
return rootview;

在这里插入图片描述
二、fragment获取activity中的消息
1)只用再实现一个 抽象方法String getmsgfromactivity(String msg);让其返回我们获取的消息。
2)在fragment里获取activit传出的消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值