当前位置: 移动技术网 > 移动技术>移动开发>Android > Android Fragment与Activity之间的相互通信实例代码

Android Fragment与Activity之间的相互通信实例代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

android fragment与activity之间的相互通信

前言

自从android3.0引入fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适配问题。fragmenty不能单独存在,必须依赖activity作为视图展示的一部分,同事它具有自己的生命周期,接收它自己的事件,具有更加灵活的特性,如今fragment已经被广泛的应用到app开发中,最常见的就是单activity多fragment的模式。fragment依赖于activity而存在,就不可避免需要与activity进行交互,在这里就简单的介绍三种常用的交互方式。

一、接口方式

在fragment类中定义一个接口并在activity中实现它。fragment在onattach()回调函数中获取接口的具体实现的对象。后面,fragment就可以调用接口中的方法实现与activity的通信。

在android5.0之后废除了onattach(activity activity)的方法,转而使用onattach(context context),也就是传递的参数发生变化

public interface showmsglistener{
    void showmsg(string str);
  }

  private showmsglistener msglistener;

  @override
  public void onattach(activity activity) {
    super.onattach(activity);
    try {
      if(activity!=null){
        msglistener=(mainactivity)activity;
      }
    } catch (classcastexception e) {
      throw new classcastexception(activity.tostring()
          + " must implement showmsglistener");
    }
  }

    mbutton.setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view view) {
        msglistener.showmsg("hello android!(接口)");
      }
    });

在activity中需要实现该接口

 @override
  public void showmsg(string str) {
    toast.maketext(mainactivity.this, str, toast.length_short).show();
  }

二、广播

在activity中注册广播接收器,在fragment中发送广播

  private broadcastreceiver mbroadcastreceiver = new broadcastreceiver() {
    @override
    public void onreceive(context context, intent intent) {
      string action = intent.getaction();
      if (action.equals(action_name)) {
        string msg = intent.getstringextra("msg");
        toast.maketext(mainactivity.this, msg, toast.length_short).show();
      }

    }
  };

  public void registerboradcastreceiver() {
    intentfilter myintentfilter = new intentfilter();
    myintentfilter.addaction(action_name);
    registerreceiver(mbroadcastreceiver, myintentfilter);
  }

  @override
  protected void ondestroy() {
    super.ondestroy();
    unregisterreceiver(mbroadcastreceiver);
  }

三、fragment 从activity获取数据

在fragment 的getinstance()方法中setarguments()设置参数

public static fragment getinstance(string msg){
    bundle bundle = new bundle();
    bundle.putstring("msg",msg);
    mainfragment fragment=new mainfragment();
    fragment.setarguments(bundle);
    return fragment;
  }

再通过getarguments()方法获取

 public void initdatas() {
    bundle bundle=getarguments();
    if(bundle!=null){
      string msg=bundle.getstring("msg");
      toast.maketext(getactivity(), msg, toast.length_short).show();
    }
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网