編輯: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);
}
}
面向大眾的移動技術:在Android中為手勢編碼
構建移動應用程序和構建 Web 應用程序一樣,要時刻牢記最終目標(和用戶)。始終了解您的應用程序可 以給用戶帶來哪些利益。您的應用程序將顯示哪些類型的信息,擁有哪些功能
android手機上實現豎直seekbar的EQ均衡器
做音樂播放器,有時會要求EQ均衡器,但android默認的樣式是水平的,這時就需要費點心思了。先是實現默認SeekBar樣式的EQ均衡器:這是4.0以上默認樣式的 Se
Android中如何使用資源(resource)
Android平台, 可以使用本地資源, 也可以使用系統資源;使用靜態R類訪問資源, R類中包含一個靜態子類, R類中每一個子類都把它的相關資源表示為變量的形式;資源表被
Android ApiDemos示例解析(22) App->Dialog
這個例子的主Activity定義在AlertDialogSamples.java 主要用來介紹類AlertDialog的用法,AlertDialog提供的功能是多 樣的: