上一篇我们讲到与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的代码:

  1 package com.example.fragment;
  2 
  3 import android.app.Activity;
  4 import android.os.Bundle;
  5 import android.support.v4.app.Fragment;
  6 import android.util.AttributeSet;
  7 import android.util.Log;
  8 import android.view.LayoutInflater;
  9 import android.view.View;
 10 import android.view.View.OnClickListener;
 11 import android.view.ViewGroup;
 12 
 13 import com.example.fragmentdemo.R;
 14 
 15 public class Fragment1 extends Fragment {
 16 
 17     private static final String TAG = "FragmentDemo";
 18     private OnButtonClickListener mListener;
 19 
 20     /**
 21      * 这里我们创建一个回调接口
 22      * 
 23      * @author Myp
 24      * 
 25      */
 26     public interface OnButtonClickListener {
 27         public void onButtonClicked();
 28     }
 29 
 30     @Override
 31     public void onAttach(Activity activity) {
 32         Log.v(TAG, "Fragment1 onAttach");
 33         Bundle args = getArguments();
 34         if (null != args) {
 35             /*
 36              * 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。
 37              */
 38             Log.d(TAG,
 39                     "Fragment1 Get data from activity "
 40                             + args.getString("hello"));
 41         }
 42 
 43         try {
 44             mListener = (OnButtonClickListener) activity;
 45         } catch (ClassCastException e) {
 46             throw new ClassCastException(activity.toString()
 47                     + " must implement OnButtonClickListener");
 48         }
 49         super.onAttach(activity);
 50     }
 51 
 52     @Override
 53     public void onInflate(Activity activity, AttributeSet attrs,
 54             Bundle savedInstanceState) {
 55         Log.d(TAG, "onInflate");
 56         super.onInflate(activity, attrs, savedInstanceState);
 57     }
 58 
 59     @Override
 60     public void onCreate(Bundle savedInstanceState) {
 61         Log.v(TAG, "Fragment1 onCreate");
 62         super.onCreate(savedInstanceState);
 63     }
 64 
 65     @Override
 66     public void onDestroy() {
 67         Log.v(TAG, "Fragment1 onDestroy");
 68         super.onDestroy();
 69     }
 70 
 71     @Override
 72     public void onResume() {
 73         Log.v(TAG, "Fragment1 onResume");
 74         super.onResume();
 75     }
 76 
 77     @Override
 78     public void onStart() {
 79         Log.v(TAG, "Fragment1 onStart");
 80         super.onStart();
 81     }
 82 
 83     @Override
 84     public void onDetach() {
 85         Log.v(TAG, "Fragment1 onDetach");
 86         super.onDetach();
 87     }
 88 
 89     @Override
 90     public void onPause() {
 91         Log.v(TAG, "Fragment1 onPause");
 92         super.onPause();
 93     }
 94 
 95     @Override
 96     public void onStop() {
 97         Log.v(TAG, "Fragment1 onStop");
 98         super.onStop();
 99     }
100 
101     @Override
102     public View onCreateView(LayoutInflater inflater, ViewGroup container,
103             Bundle savedInstanceState) {
104         Log.v(TAG, "Fragment1 onCreateView");
105         View view = inflater.inflate(R.layout.fragment1, container, false);
106         // 为button注册事件,并且调用回调接口,将信息返回给上层
107         view.findViewById(R.id.fragment1_btn).setOnClickListener(
108                 new OnClickListener() {
109                     @Override
110                     public void onClick(View v) {
111                         mListener.onButtonClicked();
112                     }
113                 });
114         return view;
115     }
116 
117     @Override
118     public void onDestroyView() {
119         Log.v(TAG, "Fragment1 onDestroyView");
120         super.onDestroyView();
121     }
122 
123     @Override
124     public void onActivityCreated(Bundle savedInstanceState) {
125         Log.v(TAG, "Fragment1 onActivityCreated");
126         super.onActivityCreated(savedInstanceState);
127     }
128 
129 }
View Code

相关文章:

  • 2021-06-04
  • 2022-02-24
  • 2021-10-29
  • 2021-09-03
  • 2021-12-15
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2021-09-21
  • 2021-04-10
  • 2021-09-23
  • 2021-07-21
  • 2021-12-08
  • 2021-11-01
相关资源
相似解决方案