Activity中嵌套使用Fragment
Activity中嵌套使用Fragment
在Activity中添加Fragment
-
静态加载Fragment //此方法灵活性低,不常,也不建议使用
-
新建自定义Fragment ,继承Fragment/ 开发环境自动生成 :
package com.neostra.test;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class FirstFregment extends Fragment {
/*初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,
但是不建议执行耗时的操作,比如读取数据库数据列表*/
-
添加FirstFragment对应布局文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity2">
<!-- TODO: Update blank fragment layout -->
<View
android:id="@+id/view_01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"/>
</androidx.constraintlayout.widget.ConstraintLayout> -
在Activity对应布局中添加<fragment>标签 ,示例代码如下:
<fragment
android:name="com.neostra.test.FirstFregment" //此属性值一定要为全限定类名
android:layout_width="match_parent"
android:layout_height="match_parent" />
-
静态加载Fregment结束,需要多少个Fragment即添加多少个此标签,灵活性低 ,因此如下介绍 动态加载Fragment
-
动态加载Fragment //推荐使用
-
新建自定义Fragment ,继承Fragment/ 开发环境自动生成 :
package com.neostra.test;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
public class FirstFregment extends Fragment {
/*初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,
但是不建议执行耗时的操作,比如读取数据库数据列表*/
-
添加FirstFragment对应布局文件:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".MainActivity2">
<!-- TODO: Update blank fragment layout -->
<View
android:id="@+id/view_01"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"/>
</androidx.constraintlayout.widget.ConstraintLayout> -
在Activity对应布局中添加一个自定义布局并赋予id,作为Fragment的容器
<LinearLayout
android:id="@+id/freg_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"/> -
在需要动态加载Fragment的Activity 中做如下操作:
public void onClick(View view) {
/*点击对应按钮,跳转到指定的Fragment*/
switch (view.getId()){
case R.id.pref_01:
/*getSupportFragmentManager() : 获取到FragmentManageer对象,用于开启事务
beginTransaction() : 开启事务
replace(参数1,参数2) : 替代Fregment容器中的视图, 参数1为Fragment容器的id,参数2 为目标Fregment对象
commit(); 提交事务
//注:关于为什么要用到事务,我的理解是与Fragment和Activity的生命周期有关,Activity不存在了,Fragment也就消失了
* */
getSupportFragmentManager().beginTransaction().replace(R.id.freg_container,new FirstFregment()).commit();
break;
case R.id.pref_02:
getSupportFragmentManager().beginTransaction().replace(R.id.freg_container,new SecFragment()).commit();
break;
case R.id.pref_03:
getSupportFragmentManager().beginTransaction().replace(R.id.freg_container,new ThirdFragment()).commit();
} -
-