动态创建Fragment

动态创建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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容