• Fragment与Acitvity通信


    Fragment与Activity通信的方式如下:

      一、通过初始化函数提供

     1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;

     2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。

      二、创建回调接口

     比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。

     首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。

     1.创建回调接口;

    public interface OnButtonClickListener {
    		public void onButtonClicked();
    	}

     2.为了确保宿主activity实现这个接口,fragment1的onAttach() 方法中通过将传入的activity强制类型转换,实例化一个OnButtonClickListener对象;

           @Override
    	public void onAttach(Activity activity) {
    		Log.v(TAG, "Fragment1 onAttach");
    		Bundle args = getArguments();
    		if (null != args) {
    			// 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。		try {
    			mListener = (OnButtonClickListener) activity;
    		} catch (ClassCastException e) {
    			throw new ClassCastException(activity.toString()
    					+ " must implement OnButtonClickListener");
    		}
    		super.onAttach(activity);
    	}

     3.注册Button的Click事件,并在事件中调用回调方法。

           @Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    		Log.v(TAG, "Fragment1 onCreateView");
    		View view = inflater.inflate(R.layout.fragment1, container, false);
    		// 为button注册事件,并且调用回调接口,将信息返回给上层
    		view.findViewById(R.id.fragment1_btn).setOnClickListener(new OnClickListener() {
    			@Override
    			public void onClick(View v) {
    				mListener.onButtonClicked();
    			}
    		});
    		return view;
    	}

     然后,Activity的代码要实现:

     1.通过implements实现回调接口;

    public class MainActivity extends FragmentActivity implements OnButtonClickListener{

     2.重写回调方法,然后向Fragment2传递数据。

           @Override
    	public void onButtonClicked() {
    		Log.i(TAG, "onButtonClicked");
    		TextView tv = (TextView) fragment2.getActivity().findViewById(R.id.fragment2_tv);
    		tv.setText(tv.getText() + "
    从Fragment1收到数据!");
    	}

      三、源码下载

    参考链接:http://www.cnblogs.com/getherBlog/p/3949171.html

    代码下载链接:http://www.apkbus.com/android-179360-1-1.html

  • 相关阅读:
    Writing and deploying a custom report in Visual Studio for Dynamics 365 /PowerApps
    Integrating Dynamics 365 CE with PowerApps
    Creating a console application to import data to Dynamics 365 / Power Apps
    DNS仍然是整个互联网中最脆弱的一环
    域名解析TTL值设置为多少合适?
    DNS TTL 字段就是骗你的
    DNS域名轮询业务监控
    域名到站点的负载均衡技术一览
    nginx+iis实现负载均衡
    用Node.js基于Express框架重写博客程序,从此告别ASP.NET。
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3949880.html
Copyright © 2020-2023  润新知