Android Fragment实践(一)-通过Activity来管理两个Fragment

在同一个Activity下实现两个Fragment之间的通信 界面的架构为:一个Activity里面嵌套若干个Fragment,通过侧滑导航栏切换Activity中的Fragment。 为什么要把这篇文章单独拿出来而不放在开发笔记中呢,因为感觉这个比较难实现,其实也不是难实现,而是我在写的过程中尝试了几种方法,最终实现了我想要的功能,故在此记下,以免忘记。 那么我想实现的功能是什么? 我做的是一个翻译app(即将上线),其中想实现通信的是Transla... 阅读详情

自从Android推出Fragment之后,这个组件迅速被Android应用程序广泛使用。本篇继续探索Fragment的使用。

案例介绍:

功能:用一个Activity来管理两个Fragment,并且在其中一个Fragment中,点击按钮,影响到第二个Fragment。

截图:

运行结果:

 说明:

1. 布局为列模式排列,最上面是一个Fragmet,中间是一个LinearLayout,最下面也是一个Fragmet;

2. 点击Fragment1的Button1, 会更新Fragment2中的textview;

点击Fragment2的Button2, 会更新Fragment1中的textview;

 核心代码:

(1)MainActivity:

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    private List<Fragment> mFragmentList = new ArrayList<Fragment>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void putFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }
    public Fragment getFragment(int index) {
        return mFragmentList.get(index);
    }
}

说明:

mFragmentList用于保存Fragment实例,并且提供putFragment和getFragment的方法。

(2)TopFragment:  (BottomFragment的实现也是如此逻辑)

public class TopFragment extends Fragment {
    private static final String TAG = "TopFragment";
    private View convertView;
    private TextView mTextview;
    private Button mButton;

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.fragment_top, container, false);
            initView();
            initClient();
        }
        return convertView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        MainActivity activity = (MainActivity) getActivity();
        activity.putFragment(this);
    }

    private void initView() {
        mTextview = convertView.findViewById(R.id.text_top);
        mButton = convertView.findViewById(R.id.button_top);
        Log.i(TAG, "[initView]===" + mTextview.getText());
    }

    public void updateView(String data) {
        mTextview.setText(data);
    }

    private void initClient() {
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity activity = (MainActivity) getActivity();
                BottomFragment bottomFragment =(BottomFragment) activity.getFragment(1);

                bottomFragment.updateView("被topFragment更新");
            }
        });
    }
}

说明:

1. 在onActivityCreated中,获取fragment所在的activity,并且将fragment添加到list中;

2. 在点击事件中:

通过activity获取到要操作的目标Fragment(BottomFragment),并且调用BottomFragment的方法updateView,来达到修改BottomFragment的界面的目的。

MainActivity activity = (MainActivity) getActivity();

BottomFragment bottomFragment =(BottomFragment) activity.getFragment(1);

bottomFragment.updateView("被topFragment更新");

(3)Activity的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >
    <fragment
        android:id="@+id/top_fragment"
        android:name="com.test.mydemofrag2.ui.TopFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        >

    </fragment>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_weight="1"
        >
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="mid text"
            >
        </TextView>
    </LinearLayout>

    <fragment
        android:id="@+id/bottom_fragment"
        android:name="com.test.mydemofrag2.ui.BottomFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        >
    </fragment>
</LinearLayout>

说明:

布局为列模式排列,最上面是一个Fragmet,中间是一个LinearLayout,最下面也是一个Fragmet;

全部工程传送门:

 AndroidFragment的使用-一个Fragment影响另外一个fragment。-Android文档类资源-优快云下载


Activity与Fragment易混点归纳 Android开发中Activity和Fragment是非常重要的两个知识点,这里我们就分别归纳一下,在使用Activity和Fragment时需要注意的一些事项,特别是对于Fragment,在对其进行管理时我们要选择好的一些方式。 一、Activity要点 Activity负责展示UI给用户,负责和用户的交互操作。本部分主要对Activity的生命周期、如何保存状态信息、如何讲一个A 阅读详情

相关推荐

Hilt 和 ViewModel 在 Android 中的使用总结(Activity、Fragment、Compose)

在现代 Android 开发中,是构建健壮应用的关键。

tangweiguo03051987的博客 1691

新闻列表小程序

要求: 编写Android程序,在一个Activity中展示两个Fragment:一个用于展示新闻列表;当单击列表中的某一条新闻标题时,在另一个Fragment中显示新闻详情。 代码实现: activity_main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http...

Knowledge warehouse 1135

【Android进阶】8、单 Activity-多 Fragment 模式 与 FragmentManager 管理器

定义 UI 布局文件创建 fragment 类并设置其视图为第一步定义的布局编写代码以实例化部件首先在中添加字符串资源

呆呆的猫的博客 1028

Android案例之Fragment的使用——川菜菜谱

Android案例之Fragment的使用——川菜菜谱 本案例将会演示如何在一个Activity中展示两个Fragment(一个Fragment用于展示川菜列表,一个Fragment用于展示川菜做法),并实现Activity与Fragment通信功能 1. 准备工作 导入两个所需图片至mipmap文件夹,在res/layout文件夹的activity_main.xml文件中添加两个fragment,分别用于显示菜单列表和菜谱的做法信息 2. 创建两个Fragment的布局文件 在res/layout文

小菜鸡的小博客 1万+

Android 实现同个Activity中存在多个Fragment多次切换之后依次返回(一)(Fragment回退栈简单使用)

转自:http://blog.youkuaiyun.com/xuyonghong1122/article/details/50897496 首先说下什么情况会用到Fragment的回退栈,假设现在要在一个Activity上不停的切换Fragment,但是要求我们可以用安卓的返回键返回上一个Fragment这个时候就要用到Fragment的回退栈了  效果图:    这个回退栈类似于安卓

xjbclz的专栏 1864

【车联网】通用安卓Android内存优化策略:及时释放内存资源与管理生命周期相关对象,核心目标是在Activity/Fragment 销毁时主动释放持有的资源,避免因引用未断导致的内存泄漏。

针对,核心目标是在,避免因引用未断导致的内存泄漏。以下从。

奶爸的编程之路,也就一周冷个三天 190

android fragment 真正的完全解析 下

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上)。 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity

ly985557461的专栏 782

构建Android:在Activity中动态加载及管理Fragment和数据交换实践

Fragment代表了Activity的一个片段。它拥有自己的布局和生命周期,允许开发者在运行时动态地添加、移除和替换。Fragment的引入,使得应用能够适应多种屏幕尺寸和设备配置,而不需修改Activity布局。FrameLayout是Android中最简单的布局之一,它的主要特点是它会将所有加入的子视图层叠起来,子视图会按照加入的顺序进行堆叠,后加入的视图会覆盖在之前的视图之上。

weixin_28771751的博客 428

【Activity】安卓Android开发中的Activity、Fragment、Adapter

我最近刚刚接触Android开发,对这个方面的开发可以说是一无所知,所以想着尝试开始理解。在这段时间的摸爬滚打里面,我发现了其中Activity、Fragment、Adapter三种非常常用,所以在这里进行一下我自己的理解。

weixin_67898144的博客 2792

深入掌握Android Fragment与ViewPager

本文还有配套的精品资源,点击获取 简介:在Android开发中,Fragment作为组件,支持多屏幕和复杂用户界面的构建。本主题深入探讨Fragment的生命周期、创建方法,并详解如何通过ViewPager实现Fragment的平滑切换。从基础概念、生命周期到实现适配器,本内容旨在指导开发者理解Fragment与ViewPager结合的使用场景,例如标签式导航和多页面应用,...

weixin_36151775的博客 1162

Android应用源码之Fragment例子_源码.zip

Android应用源码之Fragment例子_源码

Android 中 Activity 和 Fragment 的区别

【代码】Android 中 Activity 和 Fragment 的区别。

qq_39460057的博客 914

手把手教你用Simulink搭建IEEE33节点配电网模型(附赠两本电力系统书籍)

本文详细介绍了如何使用Simulink搭建IEEE33节点配电网模型,涵盖从基础配置到高级应用的完整流程。通过MATLAB脚本自动化参数注入、监测系统部署和典型应用场景实战,帮助读者快速掌握配电仿真模型的核心技术。附赠两本电力系统经典书籍资源,助力深入学习与研究。

weixin_29073241的博客 247

史上最全Fragment介绍,包括fragment的定义,生命周期,用法

一、为什么要使用Fragment 1、当我们需要动态的多界面切换的时候,就需要将UI元素和Activity融合成一个模块。在2.3中我们一般通过各种Activity中进行跳转来实现多界面的跳转和单个界面动态改变。在4.0或以上系统中就可以使用新的特性来方便的达到这个效果--Fragment类。Fragment类似一个嵌套Activity,可以定义自己的layout和自己的生命周期。 2、

想飞的企鹅 5987

Dify视觉模型节点避坑指南:我用Qwen2.5-VL做OCR识别时踩过的3个坑(及解决方案)

本文分享了使用Dify平台和Qwen2.5-VL视觉模型进行OCR票据识别时遇到的三个常见问题及解决方案,包括文件变量传递、结构化输出和条件分支判断失效。通过实战经验,帮助开发者优化多模态模型在财务自动化中的应用,提升OCR识别精度和效率。

weixin_29284885的博客 402

用迅为RK3588开发板DIY无人机飞控:从电路设计到PID调参全记录

本文详细记录了使用迅为RK3588开发板DIY无人机飞控的全过程,从硬件选型、PCB设计到实时系统构建和PID调参。RK3588核心板凭借其强大的AI算力和丰富接口,成为高性能无人机控制解决方案的理想选择。文章还分享了视觉导航系统集成和实际飞行测试经验,为硬件爱好者提供实用参考。

weixin_29053577的博客 426

利用Fragment实现Tab页

详细方案参见: http://www.cnblogs.com/android100/p/Android-Fragment-ActivityGroup.html

MiniMicall的专栏 1058

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 315

Android Fragment完全解析(下)

转载自:http://blog.youkuaiyun.com/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上)。 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,F

wurensen的专栏 555

CATIA二次开发一一一计算 CATIA 零件模型在全局坐标系下的包围盒方法

本文介绍了一种在CATIA中计算零件模型全局坐标系下包围盒(BoundingBox)的方法。通过遍历零件几何体特征点,并应用坐标变换矩阵,最终返回精确的零件包围盒。核心步骤包括初始化与输入校验、坐标变换处理、几何体特征点遍历以及全局坐标变换。关键方法涉及CATMathBox操作和坐标变换接口。该方法适用于碰撞检测、可视化优化和装配分析等场景,能够快速判断零件间的空间干涉,提升渲染性能,并计算零件在装配体中的全局位置范围。

工业软件开发 894

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

【深度学习|Transformer模型学习】什么是前馈神经网络(Feed-Forward Neural Network)?将前馈神经网络中的全连接层变成1*1卷积层会有什么样的效果?

985小水博的摸鱼日常 1374

Android Fragment 真正的完全解析(下)

本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互,Fragment与Activity交互的最佳实践,没有视图的Fragment的用处,使用Fragment创建对话框,如何与ActionBar,MenuItem集成等~~

2501_90255873的博客 961

DeepSeek与YOLO融合技术的微信小程序实现方案

本文介绍了一个基于微信小程序和Flask后端的智能图像检测系统。系统采用DeepSeek-7B进行自然语言理解,YOLOv8执行目标检测,并通过融合验证模块确保结果准确性。核心流程包括:用户通过小程序上传图片和文本需求,后端解析意图后执行目标检测,最后验证并返回结果。关键技术包括DeepSeek的指令理解、动态阈值调整和模型优化(ONNX、TensorRT)。系统适用于工业质检等场景,如"检测表面划痕",能自动识别目标并验证结果。部署需GPU服务器,并包含安全机制保障系统稳定运行。

老郑的博客 273

第四章 不可不会的Activity和Fragment【Android基础学习】

第四章 不可不会的Activity和Fragment【Android基础学习】

小心星的博客 816

【GlobalMapper精品教程】006:Excel表格(.xls)或文本(.txt .csv)坐标文件生成矢量点

原始的坐标数据如下图所示,其中坐标为Lat经度,LNG纬度,均为十进制度的形式,一般软件都支持十进制度的格式,如果不支持,你可以尝试使用度分秒的形式,图中的DDMMSS-LAT为纬度,DDMMSS-LNG为经度。打开globalmapper软件,点击【打开数据文件】,选择坐标数据文件(案例中的数据位配套实验数据包中的data006.rar)气象台站分布点坐标.xls。选择坐标系:本案例数据采用的是经纬度,因此选择Geographic(Latitude/Longitude),基准选择WGS84,点击确定。

智慧空间实验室 2569

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

android fragment 博客 学习记录

转载请标明出处:http://blog.youkuaiyun.com/lmj623565791/article/details/37992017 上篇博客中已经介绍了Fragment产生原因,以及一些基本的用法和各种API,如果你还不了解,请看:Android Fragment 真正的完全解析(上)。 本篇将介绍上篇博客提到的:如何管理Fragment回退栈,Fragment如何与Activity交互...

weixin_30425949的博客 101

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: Android基础--Android Fragment的使用,以及“commit already called”问题解决
下一篇: Android Fragment实践- ViewPager +Fragment实现页面滑动效果
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值