方法一:Activity加载相应的Fragment时向对应Fragment传递数据:
1.在加载Fragment时也可以往其中加入数据用于MainActivity与Fragment之间的数据的传递。
2.Fragment.setArguments(myBundle);第一种由MainActivity向Fragment传递数据的方式;
第一步:Activity里面的代码:
// 1.此Fragment里面传入了数据
Bundle myBundle = new Bundle();// 放数据的容器
myBundle.putString("data", inputtext);// 容器内放入数据
AnotherRightFragment anotherfragment = new AnotherRightFragment();
anotherfragment.setArguments(myBundle);// 把容器这个参数设置给Fragment
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager
.beginTransaction();
transaction.replace(R.id.right_layout, anotherfragment, "myTag");
transaction.addToBackStack(null);
transaction.commit();
第二步:.Fragment里面的代码:
//获得数据
String data=getFragmentManager() //获取碎片管理者
.findFragmentByTag("myTag") //获得标记
.getArguments() //获得参数
.getString("data"); //获得键,键对应Activity里面放入的数据
方法二:通过handler实现activity向Fragment传递数据
第一步:activity里面代码:
/**
* 设置Handler: 1.mHandler在子线程的里面通过sendMessage方法设置了数据;
* 该数据将由此MainActivity传到TimeRightFragment。
* 2.setHandler方法用于在TimeRightFragment中的回调函数onAttach
* ()中得到TimeRightFragment所在MainActivity;
* 并调用此setHandler方法得到mHandler,然后TimeRightFragment创建Handler对象
* ,通过标记拿到相应的Message;(第一种由MainActivity向Fragment传递数据的方式;)。
* 3.mHandler要为全局变量。
*
* @param handler
*/
public void setHandler(Handler handler) {
mHandler = handler;
}
初始化变量:private Handler mHandler;
mHandler里面设置你要传递的值: Message msg = new Message();
msg.what = 1;
Bundle bundle = new Bundle();
bundle.putString("num", data); //data为你要传递的值
msg.setData(bundle);// 传入值
mHandler.sendMessage(msg);// mHandler传递参数 ;mHandler为全局变量
第二步:Fragment里面的代码:
获取AMainActivity里面的mHandler
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mActivity = (MainActivity) activity;
((MainActivity) mActivity).setHandler(mHandler);
}
通过mHandler拿到Message的值// handler类接收数据
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == 1) {
// 动态更新UI界面
String str = msg.getData().getString("num") + "";
tvShow.setText("3>."+str);
}
};
};