欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android Fragment动态创建详解及示例代码

程序员文章站 2024-03-01 11:51:46
android fragment 动态创建 fragment是activity的界面中的一部分或一种行为。可以把多个fragment组合到一个activity中来创建一个...

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);
  }

}

运行项目

Android Fragment动态创建详解及示例代码

接下来实现动态创建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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!