Fragment从Activity里获取数据(Activity向Fragment传递数据)

本文介绍两种在Android应用中从Activity向Fragment传递数据的方法:一是通过Fragment.setArguments使用Bundle传递数据;二是利用Handler机制实现数据传递。

方法一: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);  
	            } 
	        }; 
	    };  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值