关于fragment和activty的通信个人的总结浅谈

来源:互联网 发布:淘宝网男花保 套装 编辑:程序博客网 时间:2024/05/29 18:07

           fragment不能使用构造传参数,因为fragment不是普通的类,不能通过new对象的方式,将activty的参数传递给fragment,因为它是一个和activty一样有生命周期的,不是一般的类,fragment的构造是一个无参构造,new一个有参的构造也无法使用。

       关于fragement和activty的通信就有以下两种方式,首先activty向fragment传值可以通过fragment的对象,和bundle值。fragment向activty传值只要是通过获取activty对象或者通过回调接口的方法。

首先我们来看fragment向activty里面传值:fragment可以轻松获取到它当前的activty:activty=getactivty();就ok了.第二种接口回调:

回调有三个要求:一个主类,一个辅助类。第二个是:不确定事件。第三个:

1.fragmemt给activty传值

例如下面这个例子:j就是通过获取activty对象,然后直接可以调它的方法,这样的话,就可以通信传值了

rec=new recycleadapter();activty= (PlayerActivity) getActivity();//获取关联的activty
//
这是我的fragment和适配器写的一个回调接口
rec.SetOnItemclick(new recycleadapter.Onitemlisten() { @Override public void onitemclick(View view, int position) { Toast.makeText(view.getContext(), list1.get(position).getUrl()+"", Toast.LENGTH_SHORT).show(); activty.setpaly();//在一个事件触发这个这个方法 }});mrycleview.setAdapter(rec);
2.activty给fragment传值
第一种:通过fragment对象,然后在调用方法传递,看代码
请看这个是fragment的代码:设了一个set的方法
public void set(int a){    this.a=a;}
//这个下面是activty里面的部分代码通信传值核心都在这了
        fragments[0]=new fram_0();        fragments[1]=new fram_1();

switch (checkedId)       {            case R.id.radioButton:              change(0);               ((fram_0) fragments[0]).set("我是activry哈哈哈哈");
            //注意这个就是调用它的set方法传值,
2.第二种方法,activty向fragment传值Bundle
activty中的传递:
fragments[0]=new fram_0();Bundle bundle=new Bundle();bundle.putString("name","33344445555");fragments[0].setArguments(bundle);

fragment中的接收
 bundle=getArguments();Log.e("msg",""+bundle.getString("name"));

原创粉丝点击