編輯:Android開發教程
上一篇我們講到與Fragment有關的常用函數,既然Fragment被稱為是“小Activity”,現在我們來講一下Fragment如何與Acitivity通信。如果上一篇還有不懂得,可以再看一下。傳送門。
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); } }
構建移動應用程序和構建 Web 應用程序一樣,要時刻牢記最終目標(和用戶)。始終了解您的應用程序可 以給用戶帶來哪些利益。您的應用程序將顯示哪些類型的信息,擁有哪些功能
做音樂播放器,有時會要求EQ均衡器,但android默認的樣式是水平的,這時就需要費點心思了。先是實現默認SeekBar樣式的EQ均衡器:這是4.0以上默認樣式的 Se
Android平台, 可以使用本地資源, 也可以使用系統資源;使用靜態R類訪問資源, R類中包含一個靜態子類, R類中每一個子類都把它的相關資源表示為變量的形式;資源表被
這個例子的主Activity定義在AlertDialogSamples.java 主要用來介紹類AlertDialog的用法,AlertDialog提供的功能是多 樣的: