Fragment的创建(二)

本文介绍Fragment的两种创建方式:XML布局文件定义与Java代码动态添加,并解析FragmentManager与FragmentTransaction的作用及如何通过它们进行Fragment的增删操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一节介绍了Fragment的生命周期,在今天的工作中,解决了昨天遗留Fragmnet的问题。

那么Fragment是怎样创建的呢,Fragment的创建 有两种方式,1 通过XML方式 2 通过Java的方式

1 通过XML的方式

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.chendi.fragmentdemo.MainActivity">

  <fragment
      android:id="@+id/first_fragment"
      android:tag="firstFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:name="com.chendi.fragmentdemo.FirstFragment">
  </fragment>
</RelativeLayout>
在主界面布局中加入fragment标签,其中有三个重要属性,id,tag,name

id    Fragment的ID,与普通控件相同

tag   与id功能类似,都是引用Fragment的一种方法,使用FragmentMananger.findFragmentByTag()方法来引用Fragment

name   这个是用来添加具体的Fragment类,必须是完整包名+类名。


2. 通过Java动态添加Fragment

public void addFragment()
{
    FragmentManager manager=getSupportFragmentManager();
    FragmentTransaction transaction=manager.beginTransaction();
    transaction.add(R.id.activity_main,new FirstFragment(),"firstFragment");
    transaction.commit();
}

这里用到了两个主要的类,FragmentManager 和FragmentTransaction  分别用来管理Fragment和执行一系列的操作,执行完后,使用commit()方法。

其中add()方法有三种重载形式,

add(int containerViewId,Fragment fragment)  在父视图中加入Fragment

add(int containerViewId,Fragment fragment,String tag) 在父视图中加入带有tag的Fragment,这里的tag和XML中tag意思是一样的

add(Fragment fragment,String tag)   不需要指定父视图的Fragment,不用显示UI,主要用来保存和恢复状态


通过以上两种方式都可将Fragment加入到父视图中,但是Fragment视图的加载怎么做呢

上一节通过Fragment的生命周期可知,Fragment会在onCreateView()方法中加载布局

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view=inflater.inflate(R.layout.first_fragment,container,false);
    return view;
}
通过LayoutInflater.inflate()方法加载布局

inflate(int resourceId,ViewGroup root,boolean attachToRoot)  int resourceId  要加载的视图ID,ViewGroup root  父视图,boolean attachToRoot 是否将加载的视图与父视图绑定

我们已经用add()方法为Fragment指定了一个父视图,所以这里attachToRoot为false



FragmentManager和FragmentTransaction用来管理Fragment,具有以下功能。

1,查找Fragment

2,查看会退站状态

3,恢复历史状态

4,管理Fragment状态,add,remove,replace

5,分离和附加Fragment,detach和attach

6,显示和隐藏Fragment,show和hide




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值