Android Fragment

Fragment的生命周期

Activity的生命周期

Activity和Fragment的生命周期调度关系

创建碎片

  • 继承Fragment类
  • 在Fragment类中重写onCreateView()方法获取布局

在活动的布局中使用<fragment>标签

  • <fragment>标签的name属性,描述要加载的碎片类
  • <fragment>标签的id属性,描述要加载的碎片的id
  • <fragment>标签的tag属性,描述要加载的标签

案例

fragment_f1.xml碎片布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#00ff00"
    >


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button3" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button4" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button5" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button6" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button7" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button8" />
</LinearLayout>

fragment_f2.xml碎片布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    android:background="#ff0000"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="碎片的生命周期和活动的生命周期联合在一起分析尤其重要"
        android:id="@+id/textView" />
</LinearLayout>

F1碎片java文件


package com.hzj163.fragmentinsideactivitylayout;


import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
 * A simple {@link Fragment} subclass.
 */
public class F1 extends Fragment {

    public F1() {

    }

    //onAttach附着宿主活动周期【可以获取上下文】
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        Log.i("hzj", "f1:onAttach");
    }


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i("hzj", "f1:onCreate");
    }

    //onCreateView设置碎片布局周期【如果在活动中使用fragment标签加载碎片,那么碎片的布局率先出来】
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        Log.i("hzj", "f1:onCreateView");
        return inflater.inflate(R.layout.fragment_f1, container, false);
    }

    //onActivityCreated周期代表活动的onCreated周期执行完毕
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.i("hzj", "f1:onActivityCreated");
    }



    @Override
    public void onStart() {
        super.onStart();
        Log.i("hzj", "f1:onStart");
    }

    //onResume周期总是晚于活动的onResume周期
    @Override
    public void onResume() {
        super.onResume();
        Log.i("hzj", "f1:onResume");
    }

    //onPause周期总是晚于活动的onPause周期
    @Override
    public void onPause() {
        Log.i("hzj", "f1:onPause");
        super.onPause();

    }
    //onStop周期总是晚于活动的onStop周期
    @Override
    public void onStop() {
        Log.i("hzj", "f1:onStop");
        super.onStop();
    }
    //onDestroyView周期销毁碎片的View
    @Override
    public void onDestroyView() {
        Log.i("hzj", "f1:onDestroyView");
        super.onDestroyView();
    }
    //onDestroy周期销毁碎片
    @Override
    public void onDestroy() {
        Log.i("hzj", "f1:onDestroy");
        super.onDestroy();
    }
    //onDetach周期销毁碎片附着
    @Override
    public void onDetach() {
        Log.i("hzj", "f1:onDetach");
        super.onDetach();
    }
}

F2碎片java文件


package com.hzj163.fragmentinsideactivitylayout;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


/**
 * A simple {@link Fragment} subclass.
 */
public class F2 extends Fragment {


    public F2() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_f2, container, false);
    }


}

activity_main.xml活动布局文件


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">
    <!--上部分的碎片-->
    <fragment
        android:id="@+id/f1"
        android:name="com.hzj163.fragmentinsideactivitylayout.F1"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:tag="f1"></fragment>

    <!--下部分的碎片-->
    <fragment
        android:id="@+id/f2"
        android:name="com.hzj163.fragmentinsideactivitylayout.F2"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:tag="f2"></fragment>

</LinearLayout>

MainActivity活动java文件


package com.hzj163.fragmentinsideactivitylayout;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

//在活动布局中申明碎片
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i("hzj", "onCreate");
    }


    @Override
    protected void onStart() {
        super.onStart();
        Log.i("hzj", "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i("hzj", "onResume");
    }


    @Override
    protected void onPause() {
        Log.i("hzj", "onPause");
        super.onPause();

    }

    @Override
    protected void onStop() {
        Log.i("hzj", "onStop");
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        Log.i("hzj", "onDestroy");
        super.onDestroy();
    }
}