Android Fragment动态创建详解及示例代码
android fragment 动态创建
fragment是activity的界面中的一部分或一种行为。可以把多个fragment组合到一个activity中来创建一个多界面并且可以在多个activity中重用一个fragment。可以把fragment任务模块化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity运行时被添加或删除。
fragment不能独立存在,它必须嵌入到activity中,而且fragment的生命周期直接受所在的activity的影响。例如:当activity暂停时,他拥有的所有的fragment都暂停了,当activity销毁时,他拥有的所有fragment都被销毁。然而,当activity运行时(在onresume()之后,onpause()之前),可以单独地操作每个fragment,比如添加或删除它们。当中执行上述针对fragment的事务时,可以将事务添加到一个栈中,这个栈被activity管理,栈中的每一条都是一个fragment的一次事务。有了这个栈,就可以反向执行fragment的事务,这样就可以在fragment级支持“返回”键(向后导航)。
当向activity中添加一个fragment时,它须置于viewgroup控件中,并且需定义fragment自己的界面。可以在layout.xml布局文件中声明fragment,元素为:<fragment>;也可以在代码中创建fragment,然后把它加入到viewgroup控件中。然而,fragment不一定非要放在activity的界面中,它可以隐藏在后台为activity工作。
实战一下
项目布局文件代码:
<linearlayout 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" android:orientation="horizontal" tools:context=".mainactivity" > <fragment android:id="@+id/fragment1" android:name="com.wuyudong.fragment.fragment1" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1" > </fragment> <fragment android:id="@+id/fragment2" android:name="com.wuyudong.fragment.fragment2" android:layout_width="0dip" android:layout_height="fill_parent" android:layout_weight="1" > </fragment> </linearlayout>
接着在layout文件夹下新建两个fragment.xml文件
fragment1.xml:
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#0000ff" android:orientation="vertical" > </linearlayout>
fragment2.xml
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ff00" android:orientation="vertical" > </linearlayout>
接着在项目源代码文件夹下新建两个java文件
fragment1.java
public class fragment1 extends fragment { /** * 当fragment被创建的时候,调用的方法,返回当前fragment显示的内容 */ @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { return inflater.inflate(r.layout.fragment1, null); } }
fragment2.java
public class fragment2 extends fragment { /** * 当fragment被创建的时候,调用的方法,返回当前fragment显示的内容 */ @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { return inflater.inflate(r.layout.fragment2, null); } }
运行项目
接下来实现动态创建fragment
在刚才的项目的基础上,新建一个项目。删除原来activity_main.xml代码中的fragment1与fragment2代码段,其他的代码不变
接下来在mainactivity中添加下面的代码:
public class mainactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // 1、判断当前手机的朝向 int width = getwindowmanager().getdefaultdisplay().getwidth(); int height = getwindowmanager().getdefaultdisplay().getheight(); fragment1 fragment1 = new fragment1(); fragment2 fragment2 = new fragment2(); fragmentmanager fm = getfragmentmanager(); fragmenttransaction ft = fm.begintransaction(); if (width > height) { // 水平方向 ft.replace(android.r.id.content, fragment1); } else { ft.replace(android.r.id.content, fragment2); } ft.commit(); } }
上面的代码实现了当手机不同朝向的时候,显示的不同的fragment
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!