上一篇我们讲到与Fragment有关的常用函数,既然Fragment被称为是“小Activity”,现在我们来讲一下Fragment如何与Acitivity通信。如果上一篇还有不懂得,可以再看一下。传送门。
Fragment与Activity通信的方式如下:
一、通过初始化函数提供
1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;
2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。
二、创建回调接口
比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。
首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。
下面我给出Fragment1的代码:
package com.example.fragment; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import com.example.fragmentdemo.R; public class Fragment1 extends Fragment { private static final String TAG = "FragmentDemo"; private OnButtonClickListener mListener; /** * 这里我们创建一个回调接口 * * @author Myp * */ public interface OnButtonClickListener { public void onButtonClicked(); } @Override public void onAttach(Activity activity) { Log.v(TAG, "Fragment1 onAttach"); Bundle args = getArguments(); if (null != args) { /* * 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。 */ Log.d(TAG, "Fragment1 Get data from activity " + args.getString("hello")); } try { mListener = (OnButtonClickListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnButtonClickListener"); } super.onAttach(activity); } @Override public void onInflate(Activity activity, AttributeSet attrs, Bundle savedInstanceState) { Log.d(TAG, "onInflate"); super.onInflate(activity, attrs, savedInstanceState); } @Override public void onCreate(Bundle savedInstanceState) { Log.v(TAG, "Fragment1 onCreate"); super.onCreate(savedInstanceState); } @Override public void onDestroy() { Log.v(TAG, "Fragment1 onDestroy"); super.onDestroy(); } @Override public void onResume() { Log.v(TAG, "Fragment1 onResume"); super.onResume(); } @Override public void onStart() { Log.v(TAG, "Fragment1 onStart"); super.onStart(); } @Override public void onDetach() { Log.v(TAG, "Fragment1 onDetach"); super.onDetach(); } @Override public void onPause() { Log.v(TAG, "Fragment1 onPause"); super.onPause(); } @Override public void onStop() { Log.v(TAG, "Fragment1 onStop"); super.onStop(); } @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; } @Override public void onDestroyView() { Log.v(TAG, "Fragment1 onDestroyView"); super.onDestroyView(); } @Override public void onActivityCreated(Bundle savedInstanceState) { Log.v(TAG, "Fragment1 onActivityCreated"); super.onActivityCreated(savedInstanceState); } }
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索fragment
, 安卓 fragment
, fragment 筛选
, fragment地图
, fragment跳转
, fragment+离线定位
, android bundle
, activity交互fragment
, android fragment
, import
, fragment 标题
, override
, public
, savedinstancestate
void
android fragment通信、android开发fragment、android usb通信开发、android即时通信开发、android wifi通信开发,以便于您获取更多的相关知识。