Android在3.0中引入了fragments的概念,主要目的是用在大屏幕設備上--例如平板電腦上,支持更加動態和靈活的UI設計.平板電腦的屏幕要比手機的大得多,有更多的空間來放更多的UI組件,而且這些組件之間會產生更多的交互.Fragment容許這樣的一種設計,而不須要你親自來管理viewhierarchy的複雜變化. 經過將activity的佈局分散到fragment中, 你能夠在運行時修改activity的外觀,並在由activity管理的back stack中保存那些變化。
例如, 一個新聞應用能夠在屏幕左側使用一個fragment來展現一個文章的列表,而後在屏幕右側使用另外一個fragment來展現一篇文章 – 2個fragment並排顯示在相同的一個activity中,而且每個fragment擁有它本身的一套生命週期回調方法,而且處理它們本身的用戶輸入事件. 所以, 取代使用一個activity來選擇一篇文章,而另外一個activity來閱讀文章 的方式,用戶能夠在相同的activity中選擇一篇文章而且閱讀, 如圖所示:
1 |
和Activity同樣,Fragment也有本身的生命週期。 一個Fragment必須老是嵌入在一個Activity中,同時Fragment的生命週期受Activity而影響。
|
Activity的生命週期影響Fragment的生命週期
html
下面經過程序來觀察Fragment的生命週期 android
第一步:新建一個Android工程命名爲FragmentLifecycle目錄結構以下圖:
app
第二步:修改activity_main.xml佈局文件代碼以下:ide
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<fragment
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
class="cn.eoe.leigo.lifecycle.MyFragment" />
</RelativeLayout>
|
第三步:編寫MainActivity類:佈局
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package cn.eoe.leigo.lifecycle;
import cn.eoe.leigo.fragment.R;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "-----Activity onCreate-----");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "-----Activity onStart-----");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "-----Activity onRestart-----");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "-----Activity onResume-----");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "-----Activity onPause-----");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "-----Activity onStop-----");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "-----Activity onDestroy-----");
}
}
|
第四步:編寫MyFragment類:spa
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
package cn.eoe.leigo.lifecycle;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyFragment extends Fragment {
private static final String TAG = "MyFragment";
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "----------Fragment onAttach----------");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "----------Fragment onCreate----------");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "----------Fragment onCreateView----------");
TextView textView = new TextView(getActivity());
textView.setText("歡迎來到石頭的博客");
return textView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "----------Fragment onActivityCreated----------");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "----------Fragment onStart----------");
}
@Override
public void onResume() {
super.onResume();
Log.d(TAG, "----------Fragment onResume----------");
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "----------Fragment onPause----------");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "----------Fragment onStop----------");
}
@Override
public void onDestroyView() {
super.onDestroyView();
Log.d(TAG, "----------Fragment onDestroyView----------");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "----------Fragment onDestroy----------");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "----------Fragment onDetach----------");
}
}
|
經過查看Log能夠看到
顯示到前臺時:
設計
MyFragment onAttach() fragment關聯到activity上
MyFragment onCreate() fragment建立
MyFragment onCreateView() fragment建立本身的視圖code
MainActivity onCreate()
MyFragment onActivityCreated() 能夠處理fragment數據的初始化xml
MainActivity onStart()
MyFragment onStart()htm
MainActivity onResume()
MyFragment onResume()
按後退鍵時:
MyFragment onPause()
MainActivity onPause()
MyFragment onStop()
MainActivity onStop()
MyFragment onDestoryView() 銷燬掉本身的視圖
MyFragment onDestory()
MyFragment onDetach() 解除和activity的關聯
MainActivity onDetory()
聲明:eoe文章著做權屬於做者,受法律保護,轉載時請務必以超連接形式附帶以下信息
原文做者: gaolei_xj