Fragment与Acticity的信息传递 || Fragment之间的信息传递

Activity将信息传递给Fragment

  • 通过Fragment的事物,挂载我们需要测试的Fragment
mTransaction = mFragmentManager.beginTransaction();
mTransaction.replace(R.id.fl_blank,new Fragment01(),"frag01");
  • 通过Tag属性,直接拿到测试的Fragment对象。调用Fragment里的方法,控制Fragment的控件
Fragment01 frag01 = (Fragment01) mFragmentManager.findFragmentByTag("frag01");

        frag01.setText("K.0");
public void setText(String content) {
        jiangli.setVisibility(View.VISIBLE);
        mTvFragment01.setText(content);
    }

Fragment将信息传递给Activity:

  • 通过getActivity()可以拿到挂载到的Activity的对象。
  • 调用Acticity里的方法,控制Acticity的控件
 MainActivity main = (MainActivity) getActivity();
                main.setSendMassage("生锈的铁剑");
public void setSendMassage(String string) {
        mSendMassage.setText(string);
    }

具体效果如下:
这里写图片描述


Fragment之间的信息传递

在一个Fragment内部,很难实时拿到其他Fragment的对象实例,自然也就无法操作其他Fragment的控件,这时候可以借助一个开源框架–EventBus。

在这个Demo中只是展示了基础用法,深入的使用可以在它的github上看到:https://github.com/greenrobot/EventBus/

1.信息传递的载体类:
  • 将需要传递的信息,作为该类的属性赋值,在传递时,直接传递的是该类的实例对象,取信息的时候,直接拿该类的属性值。
public class Event {

    private String mMsg;
    public Event(String msg) {

        mMsg = msg;
    }
    public String getMsg(){
        return mMsg;
    }
}
2.ContentFragment
  • 在onActivityCreated方法里注册EventBus
        //注册事件接收器
        EventBus.getDefault().register(this);
  • 创建解析载体类的方法,务必加上@Subscribe:
    /**
     * threadMode为回调所在的线程,priority为优先级,sticky为是否接收黏性事件。
     * @param event  载体类
     */
    @Subscribe(threadMode = ThreadMode.POSTING, priority = 0, sticky = true)
    public void MyEvent(Event event) {
       String name = event.getMsg();
        mContent.setText(name+"打了十个");
    }
3.TitleFragment通过EventBus发送消息:
/**
     * TitleFragment四个按钮的点击事件
     * @param v
     */
    @Override
    public void onClick(View v) {

        switch (v.getId()) {
                case R.id.fragment01:
                    EventBus.getDefault().post(new Event("赵日天"));

                    break;
                case R.id.fragment02:
                    EventBus.getDefault().post(new Event("叶良辰"));
                    break;
                case R.id.fragment03:
                    EventBus.getDefault().post(new Event("龙傲天"));
                    break;
                case R.id.fragment04:
                    EventBus.getDefault().post(new Event("刘斩仙"));
                    break;
        }

    }

具体实现效果如下:
这里写图片描述

github地址:https://github.com/xiong199208/FragmentEvent

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值