Activity传递给Fragmetn
1.使用SetArgumets()
方法
该方法一般用于在Activity中复用同一个Fragment,通过setArguments()来设置不同的标记,展示不同的数据。
//举例
//Activity中
Fragment fm = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("hello", hello);
fm.setArguments(bundle);
//Fragment中
Bundle bundle = getArguments();
//获取bundle之后,再用bundle获取对应的数据
String hello = bundle.getString("hello");
2.使用findFragmentByTag()
方法获取Fragment,调用Fragment的方法
//举例:
//获取当前页面的fragment,这里的Tag是在将Fragment添加到布局的时候设置的。
Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag(tag);
//调用相应的方法
fragment.xxx();
Fragmetn传递给Activity
1.通过使用接口
//举例
//Fragment中-----------------------------------------------
//定义接口
public interface MyListener{
public abstract void sendMessage(String message);
}
//定义接口的实例
private MyListener listener;
//在适当位置初始化 listener
listener = (MyListener) getActivity();
//Fragment中对应的方法中,通过调用接口的方法,传递数据
if(null != listener)
listener.sendMessage("hello");
//Activity中 -----------------------------------------------
Activity直接实现该接口
public class MainActivity extends Activity implements MyListener{
//这里做接收到数据的操作
@Override
public void sendMessage(String message){
}
}
补充:当然,也可以在Fragment中设置一个方法,专门进行Listenr初始化
//定义设置接口的方法
public void setMyListener( MyListener listener ){
this.listener = listener;
}
Fragmetn传递给Fragment
1.调用 findFragmentById()
方法获取对应Fragment,调用Fragment中的方法。
PS:该方法试用于,Fragment都设置了id的时候
//举例
Fragment1 f1 = (Fragment1) getFragmentManager().findFragmentById(R.id.fragment1);
//调用对应的方法
f1.xxx();
2.调用 findFragmentById()
方法获取对应Fragment,再通过Fragment获取对应的View,进行操作
//举例
//获取Fragment的方法上面讲了,这里不说了
TextView tv1 = (TextView) f1.getView().findViewByid(R.id.tv1);
//进行想应的操作
tv1.xxxx;
3.调用 getactivity()
方法获取对应activity,再通过activity的 findViewById()
获取对应的View,进行操作
PS:说明,属于Activity中的Fragment,在Activity中是可以获取到Fragment中的View控件的
//举例
TextView tv1 = (TextView) getActivity.findViewByid(R.id.tv1);
//进行想应的操作
tv1.xxxx;
补充,试用其他方式
1.使用本地广播,进行广播通知。
2.使用EventBus 或者 RxBus通知。