欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-02 15:55:58
android fragment与activity之间的相互通信 前言 自从android3.0引入fragment之后,主要是为了支持动态灵活的界面设计和屏幕的适...

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

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