Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android開發中的Fragment和Acitvity通信

Android開發中的Fragment和Acitvity通信

編輯:Android開發教程

上一篇我們講到與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);
    }
    
}

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved