動態建立Fragment

仇諾伊發表於2018-01-23

動態建立fragment的流程

1.0 新建一個類繼承fragment.

2.0 在自定義的fragment裡面複寫oncreateVIew的方法

3.0 在onCreateVIew的方法裡使用inflate填充器

4.0 通過Return方法把inflate得到View物件給返回出去

5.0 在使用fragment的activity裡面呼叫getFragmentManager方法.得到fragmentManager物件

6.0 通過fragment管理物件,開啟事務

7.0 使用事務物件,呼叫replace方法,替換fragment,是動態使用fragment精華

8.0 使用事務物件進行提交.

動態建立fragment的流程可以相容低版本的安卓系統

1.0 匯入包一律都是V4包下的

2.0 關於你們要使用到fragment的activity,一定要繼承fragmentActivity

3.0 在或者fragment管理物件時,你們使用方法是getSupportFragmentManager靜態方法.

fragment是activity的一部分,他依賴於Activity

fragment依賴於activity,不能單獨存在,fragment的生命週期收到activity的生命週期的影響.

第一步,new class 繼承 Fragment.

第二步,複寫onCreateView的方法

第三步,在onCreateView方法裡面進行,使用inflater把layout佈局檔案轉換為一個View物件

第四步,在onCreateView的return方法裡,把我們的View物件返回出去

第五步,在要使用activity的佈局裡面,像使用控制元件的方式把我們的fragment定義到ViewGroup(就是佈局裡面)

動態使用fragment的步驟:

第一步,new class 繼承 Fragment

第二步,複寫onCreateView方法

第三步,在onCreateView裡面進行,使用inflater把layout佈局檔案轉換為一個View物件

第四步.在onCreateVIew的return方法裡,把我們的View物件返回出去

第五步.在java程式碼裡通過靜態方法getFragmentManager獲取fragmentManager管理

第六步,通過fragmentManager的beginTransaction得到事務物件

第七步,通過事務物件呼叫.replace方法,替換控制元件為fragment

第八步,使用事務物件提交commit

v4相容包下的fragment使用(現在開發基本不用了)

1.0 自定義fragment類裡繼承v4包下的fragment.記住所有用到fragment地方匯入包必須一致

2.0 你們自定義的activity必須繼承FragmentActivity

3.0 獲取FragmentManager物件時,必須用getSupportFragmentManager方法.而不是getFragmentManager.

下面是我做的一個小Demo

是在一個頁面中實現各個Activity之間的通訊,左側點選按鈕,右側出現相應的Activity介面.同時on關實現兩個Activity之間的通訊.

第一步,在佈局檔案main_Activity中設定按鈕button和文字.然後加上佈局檔案FrameLayout.

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

android:orientation="horizontal"

tools:context=".MainActivity">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/Btton_a1"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a1"/>

android:id="@+id/Btton_a2"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a2"/>

android:id="@+id/Btton_a3"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a3"/>

android:id="@+id/Btton_a4"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a4"/>

android:id="@+id/Btton_a5"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a5"/>

android:id="@+id/Btton_a6"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a6"/>

android:id="@+id/Btton_a7"

android:background="@drawable/bg"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/a7"/>

android:id="@+id/Activity_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Activity傳來的資料"/>

android:id="@+id/Activity_et"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="callMe"/>

android:id="@+id/Activity_callChild"

android:layout_width="wrap_content"

android:background="@drawable/bg"

android:layout_height="wrap_content"

android:text="@string/a8"/>

android:id="@+id/temp"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

在MainActivity中編寫程式碼.

先編寫一個方法initview()實現初始化.

然後根據swich開始編寫Fragment.這裡有七個Fragment,每個Fragment裡面程式碼內容相似就用一個做代表.

這裡Fragment1的Activity程式碼最為複雜.

private voidinitview() {

Btton_a1= (Button) findViewById(R.id.Btton_a1);

Btton_a2= (Button) findViewById(R.id.Btton_a2);

Btton_a3= (Button) findViewById(R.id.Btton_a3);

Btton_a4= (Button) findViewById(R.id.Btton_a4);

Btton_a5= (Button) findViewById(R.id.Btton_a5);

Btton_a6= (Button) findViewById(R.id.Btton_a6);

Btton_a7= (Button) findViewById(R.id.Btton_a7);

Activity_tv= (TextView) findViewById(R.id.Activity_tv);

Activity_et= (EditText) findViewById(R.id.Activity_et);

Activity_callChild= (Button) findViewById(R.id.Activity_callChild);

temp= (FrameLayout) findViewById(R.id.temp);

Btton_a1.setOnClickListener(this);

Btton_a2.setOnClickListener(this);

Btton_a3.setOnClickListener(this);

Btton_a4.setOnClickListener(this);

Btton_a5.setOnClickListener(this);

Btton_a6.setOnClickListener(this);

Btton_a7.setOnClickListener(this);

Activity_callChild.setOnClickListener(this);

}

@Override

public voidonClick(View v) {

fragmentManager=this.getFragmentManager();

FragmentTransaction beginTransaction =fragmentManager.beginTransaction();

switch(v.getId()) {

caseR.id.Btton_a1:

extracted();

break;

caseR.id.Btton_a2:

fragment2 fragement2 =newfragment2();

beginTransaction.replace(R.id.temp, fragement2);

break;

caseR.id.Btton_a3:

fragment3 fragment3 =newfragment3();

beginTransaction.replace(R.id.temp, fragment3);

break;

caseR.id.Btton_a4:

fragment4 fragment4 =newfragment4();

beginTransaction.replace(R.id.temp, fragment4);

break;

caseR.id.Btton_a5:

fragment5 fragment5 =newfragment5();

beginTransaction.replace(R.id.temp, fragment5);

break;

caseR.id.Btton_a6:

fragment6 fragment6 =newfragment6();

beginTransaction.replace(R.id.temp, fragment6);

break;

caseR.id.Btton_a7:

fragment7 fragment7 =newfragment7();

beginTransaction.replace(R.id.temp, fragment7);

break;

caseR.id.Activity_callChild:

break;

}

beginTransaction.commit();

}

Fragment1的佈局程式碼和Activity程式碼:

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:src="@drawable/a2"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textColor="#3C6"

android:text="

佇倚危樓風細細,望極春愁,

黯黯生天際。

草色煙光殘照裡,無言誰會憑欄意。

擬把疏狂圖一醉,對酒當歌,

強樂還無味。

衣帶漸寬終不悔,為伊消得人憔悴。"/>

android:id="@+id/fragment_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Activity傳來的資料"/>

android:id="@+id/fragment_et"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="callYou"/>

android:id="@+id/fragment_callChild"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="點選事件"/>

這裡的Activity中加入了通訊,要仔細看

packagefragment.com.hulufragment;

importandroid.app.Activity;

importandroid.app.Fragment;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.text.TextUtils;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.Button;

importandroid.widget.EditText;

importandroid.widget.TextView;

importandroid.widget.Toast;

/**

  • Created by Administrator on 2016/10/1.

*/

public classfragment1extendsFragment {

privateActivityhomeActivity;

privateEditTextactivity_et;

privateViewview;

privateTextViewfragment_tv;

privateEditTextfragment_et;

privateTextViewactivity_tv;

@Nullable

@Override

publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

view= inflater.inflate(R.layout.fragment1,null);

homeActivity= getActivity();

ActivityInit();

fragemtnInit();

returnview;

}

private voidfragemtnInit() {

fragment_tv= (TextView)view.findViewById(R.id.fragment_tv);

fragment_et= (EditText)view.findViewById(R.id.fragment_et);

activity_tv= (TextView)homeActivity.findViewById(R.id.Activity_tv);

Button fragment_callChild = (Button)view.findViewById(R.id.fragment_callChild);

fragment_callChild.setOnClickListener(newView.OnClickListener() {

@Override

public voidonClick(View v) {

String trim =fragment_et.getText().toString().trim();

if(TextUtils.isEmpty(trim)){

Toast.makeText(homeActivity,"不能為空",Toast.LENGTH_LONG).show();

return;

}

activity_tv.setText(trim);

}

});

}

private voidActivityInit() {

Button Activity_callChild =(Button)homeActivity.findViewById(R.id.Activity_callChild);

activity_et= (EditText)homeActivity.findViewById(R.id.Activity_et);

Activity_callChild.setOnClickListener(newView.OnClickListener() {

public voidonClick(View v) {

String trim =activity_et.getText().toString().trim();

if(TextUtils.isEmpty(trim)){

Toast.makeText(homeActivity,"不能為空",Toast.LENGTH_LONG).show();

return;

}

fragment_tv.setText(trim);

}

});

}

}

其他的Fragment佈局檔案和Activity都相似:

packagefragment.com.hulufragment;

importandroid.app.Fragment;

importandroid.os.Bundle;

importandroid.support.annotation.Nullable;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

/**

  • Created by Administrator on 2016/10/1.

*/

public classfragment2extendsFragment {

privateTextViewtv_temp;

@Nullable

@Override

publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment2,null);

//fragment的佈局控制元件的查詢,就要用到inflater得到的VIew物件.

returnview;

}

}

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:src="@drawable/a2"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:textColor="#3C6"

android:text="

佇倚危樓風細細,望極春愁,

黯黯生天際。

草色煙光殘照裡,無言誰會憑欄意。

擬把疏狂圖一醉,對酒當歌,

強樂還無味。

衣帶漸寬終不悔,為伊消得人憔悴。"/>

android:id="@+id/fragment_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Activity傳來的資料"/>

android:id="@+id/fragment_et"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:hint="callYou"/>

android:id="@+id/fragment_callChild"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="點選事件"/>

這是我程式碼的地址,僅供參考.https://github.com/ZoeSj/FourFragment/tree/master/hulufragment

相關文章