当前位置: 代码网 > it编程>App开发>Android > Android Fragment 的使用小结

Android Fragment 的使用小结

2025年04月03日 Android 我要评论
android 中 fragment 的使用指南fragment 是 android 应用开发中的重要组件,它代表 activity 中的一部分 ui 或行为,可以组合多个 fragment 在一个

android 中 fragment 的使用指南

fragment 是 android 应用开发中的重要组件,它代表 activity 中的一部分 ui 或行为,可以组合多个 fragment 在一个 activity 中构建多窗格 ui,并在不同 activity 中重复使用某个 fragment。

基本概念

fragment 具有自己的生命周期,但依赖于宿主 activity 的生命周期。每个 fragment 都有自己的布局和行为。

创建 fragment

1. 定义 fragment 类

public class myfragment extends fragment {
    @override
    public view oncreateview(layoutinflater inflater, viewgroup container,
                             bundle savedinstancestate) {
        // 膨胀 fragment 的布局
        return inflater.inflate(r.layout.fragment_my, container, false);
    }
    @override
    public void onviewcreated(@nonnull view view, @nullable bundle savedinstancestate) {
        super.onviewcreated(view, savedinstancestate);
        // 在这里初始化视图和逻辑
    }
}

2. 创建 fragment 的布局文件 (res/layout/fragment_my.xml)

<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <textview
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello fragment!" />
</linearlayout>

添加 fragment 到 activity

方式1: 在 xml 布局中添加 (静态方式,不推荐)

<!-- activity_main.xml -->
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/myfragment"
        android:name="com.example.myfragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</linearlayout>

方式2: 在代码中动态添加 (推荐)

public class mainactivity extends appcompatactivity {
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        setcontentview(r.layout.activity_main);
        // 检查是否已经添加了fragment(防止旋转时重复添加)
        if (savedinstancestate == null) {
            // 创建fragment实例
            myfragment fragment = new myfragment();
            // 开始fragment事务
            getsupportfragmentmanager().begintransaction()
                .add(r.id.fragment_container, fragment) // 添加到容器
                .commit();
        }
    }
}

对应的 activity_main.xml 需要有一个容器:

<framelayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

fragment 事务

可以执行添加、移除、替换等操作:

// 替换fragment
getsupportfragmentmanager().begintransaction()
    .replace(r.id.fragment_container, new anotherfragment())
    .addtobackstack(null) // 允许用户按返回键返回上一个fragment
    .commit();

fragment 生命周期

fragment 的生命周期方法:

  • onattach() - fragment 与 activity 关联时调用
  • oncreate() - fragment 创建时调用
  • oncreateview() - 创建 fragment 的视图层次结构
  • onactivitycreated() - activity 的 oncreate() 完成后调用
  • onstart() - fragment 可见时调用
  • onresume() - fragment 可交互时调用
  • onpause() - fragment 不再可交互时调用
  • onstop() - fragment 不可见时调用
  • ondestroyview() - fragment 的视图被移除时调用
  • ondestroy() - fragment 不再使用时调用
  • ondetach() - fragment 与 activity 解除关联时调用

fragment 与 activity 通信

1. fragment 调用 activity 方法

// 在fragment中
if (getactivity() instanceof myactivityinterface) {
    ((myactivityinterface) getactivity()).dosomething();
}
// activity实现接口
public interface myactivityinterface {
    void dosomething();
}

2. activity 调用 fragment 方法

myfragment fragment = (myfragment) getsupportfragmentmanager()
    .findfragmentbyid(r.id.my_fragment);
if (fragment != null) {
    fragment.dosomethinginfragment();
}

3. 使用 viewmodel 共享数据 (推荐)

// 创建共享viewmodel
public class sharedviewmodel extends viewmodel {
    private final mutablelivedata<string> selected = new mutablelivedata<>();
    public void select(string item) {
        selected.setvalue(item);
    }
    public livedata<string> getselected() {
        return selected;
    }
}
// 在activity或fragment中获取
sharedviewmodel model = new viewmodelprovider(requireactivity()).get(sharedviewmodel.class);
model.getselected().observe(this, item -> {
    // 更新ui
});

最佳实践

  • 使用 androidx.fragment.app 包中的 fragment(支持库版本)
  • 避免在 fragment 中直接持有 activity 的引用
  • 使用接口进行 fragment 与 activity 的通信
  • 考虑使用 viewmodel 和 livedata 进行数据共享
  • 合理使用 addtobackstack() 管理返回栈
  • 为 fragment 添加标签,便于查找:.add(r.id.container, fragment, "tag")

高级用法

1. fragment 参数传递

// 创建fragment时传递参数
public static myfragment newinstance(string param) {
    myfragment fragment = new myfragment();
    bundle args = new bundle();
    args.putstring("key", param);
    fragment.setarguments(args);
    return fragment;
}
// 在fragment中获取参数
@override
public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    if (getarguments() != null) {
        string param = getarguments().getstring("key");
    }
}

2. 使用 navigation 组件管理 fragment

// 在build.gradle中添加依赖
implementation "androidx.navigation:navigation-fragment:2.3.5"
// 使用navcontroller导航
navcontroller navcontroller = navigation.findnavcontroller(view);
navcontroller.navigate(r.id.action_to_next_fragment);

到此这篇关于android fragment 的使用小结的文章就介绍到这了,更多相关android fragment 使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com