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