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

           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"));

 
  
 
  
 
  

你可能感兴趣的:(安卓,安卓,组件通信,fragment)