Android studio心得——fragment动态加载

2023-11-16

前言

在Android应用程序中,Fragment是一种可以嵌入Activity中的组件。通过 Fragment,我们可以将UI

目录

前言

一、什么是Android Studio

二、简介Fragment

三、学期知识汇总

四、什么是碎片(Fragment)

五、页面实现步骤

1.程序APP主界面的常用例子

2.定义4个Fragment

3.activity_main.xml代码展示

4.四个碎片代码展示

5.后台代码展示

6.运行结果

六、总结


分成多个逻辑和可重用的部分来管理。动态加载Fragment是开发Android应用程序时一个常见且有趣的任务,它使应用程序更加灵活、易于维护。

一、什么是Android Studio

Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA开发,并支持Java和Kotlin语言。Android Studio提供了代码编辑器、编译器、调试器、布局编辑器、虚拟设备模拟器、性能分析器等一系列工具,方便开发者进行应用程序的开发、测试和发布。

二、简介Fragment

随着移动设备的迅速发展,手机成为了生活必需品,平板电脑也变得越来越普及。Fragment能够同时兼顾手机和平板电脑的开发;可以让界面在平板电脑上更好地展示;Fragment是能够嵌入到活动中的组件,可以将多个片段组合在一个Activity中来构建多窗格UI,有自己的生命周期,并且可以有也可以没有用户界面。

三、学期知识汇总

经过一个学期时间的学习,学习到了很多关于Android studio的知识,比如实现项目跳转;如何仿造QQ相册,制作一个简易版的QQ相册;如何制作一个简易版的计算器;如何完成登陆与注册页面......今天我来讲讲我从Android studio里学到的Fragment方法。

四、什么是碎片(Fragment)

碎片(Fragment)是一种可以嵌入到活动中的UI片段,它能让程序更加合理和充分地利用大屏幕地空间,因而在平板电脑上应用得非常广泛。Fragment与活动非常像,同样都能包含布局,同样都有自己的生命周期。那么如何充分使用这些碎片呢?

五、页面实现步骤

1.程序APP主界面的常用例子

如图:APP下方有4个功能键,单机不同的功能键,可以加载不同的碎片。

2.定义4个Fragment

如果使用静态加载,上面的主视图布局只能加载一个碎片,不能实现动态切换的功能;这种情况下需要使用动态加载的功能,如图所示,页面1~页面4是4个不同的Fragment,在功能键进行切换的时候,Activity主视图动态加载对应的碎片进行切换。

3.activity_main.xml代码展示

在主视图activity_main.xml布局中增加FragmentLayout,这是Android中最简单的一种布局,他没有任何的定位方式,所有的控件都会摆放在布局的左上角,FragmentLayout布局可以包含多个Fragment,并根据要求动态加载指定的Fragment;主视图activity_main.xml代码如下:

<?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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/fm"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="12">
        <Button
            android:id="@+id/wx"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="微信"/>
        <Button
            android:id="@+id/txl"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="通讯录"/>
        <Button
            android:id="@+id/fx"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="发现"/>
        <Button
            android:id="@+id/w"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="我"/>
    </LinearLayout>
</LinearLayout>

4.四个碎片代码展示

增加Fragment1到Fragment4的碎片布局,布局中只有一个TextView,分别设置文本为页面一到页面四,如图完成fragment_wx.xml、fragment_txl.xml、fragment_fx.xml、fragment_w.xml..

<?xml version="1.0" encoding="utf-8"?>
<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="vertical"
    tools:context=".WxFragment">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="40dp"
        android:text="微信"/>
</LinearLayout>

5.后台代码展示

主视图包含4个按钮,根据视图的getId方法可以判断是哪一个按钮被按下;按钮被按下后调用Fragment方法,可以实现碎片的动态加载,主视图的整体代码如下:

package com.example.lyy_0506;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private Button wx,txl,fx,w;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        wx=findViewById(R.id.wx);
        txl=findViewById(R.id.txl);
        fx=findViewById(R.id.fx);
        w=findViewById(R.id.w);
        wx.setOnClickListener(this);
        txl.setOnClickListener(this);
        fx.setOnClickListener(this);
        w.setOnClickListener(this);

//        replace(R.id.fm,new WxFragment());
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.wx:
                replace(R.id.fm,new WxFragment());
                break;
            case R.id.txl:
                replace(R.id.fm,new TxlFragment());
                break;
            case R.id.fx:
                replace(R.id.fm,new FxFragment());
                break;
            case R.id.w:
                replace(R.id.fm,new WFragment());
                break;
        }
    }
    private void replace(int layout, Fragment fragment){
        //getSupportFragmentManager获取碎片管理器
        FragmentManager FM = getSupportFragmentManager();//获取管理器

        //使用碎片管理器的beginTransaction方法,启动事务管理
        FragmentTransaction FT=FM.beginTransaction();//获取启动器

        //使用事务管理replace方法,替换当前碎片
        FT.replace(layout,fragment);//替换碎片

        //将 Fragment操作(比如添加,替换等)加入到系统回退栈中
        FT.addToBackStack(null);//是否启动回退栈

        //使用事务管理的commit方法将此次碎片操作提交给主视图actitity_wx
        FT.commit();//提交




    }
}

6.运行结果

程序编写完成后在手机上运行和模拟器上运行,程序运行的效果及页面的生命周期流程如图。

在此处我们可以看到java文件继承Fragment且常用的两种方法是:

onCreateView()方法,该方法返回视图文件,相当于Activity中onCreate方法中setContentView一样onViewCreated()方法,该方法当view创建完成之后的回调方法

六、总结

在Android Studio的学习过程中,我获得了丰富的知识、技能和经验。首先,我熟练掌握了各种基础概念和核心要点,例如Activity、Fragment、Intent、布局等等。其次,在实践项目开发方面,我逐步掌握并应用了MVP框架思想,并利用SQLite数据库进行本地数据存储与管理;这门课给予我的帮助不仅是知道如何使用Android Studio进行项目开发所需要具备的理论知识与实际操作经验,更是让我对移动应用领域有更深入的认识并提高自身创新研究解决问题能力。通过这门课程的学习,我不仅加深了对Android 开发的理解,同时也提高了自己的编程技巧和实践经验。我掌握了Android Studio的基础使用方法,学会了如何使用各种组件和API进行应用程序开发,并且通过实际项目的经历加深了对整个开发流程一的理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android studio心得——fragment动态加载 的相关文章

  • 如何在TextView中显示格式化的金额?

    我有一个货币符号String和金额double 到目前为止 我显示的金额如下 amount setText currency amount 在某些地方我有 2TextViews 显示金额 中间有填充 currency setText cur
  • 以编程方式切换片段

    我有一个带有两个片段的寻呼机 每个片段都有自己的 xml 我的问题是是否可以以编程方式从一个片段切换到另一个片段并触发任何侦听器 此致 我假设你的意思是浏览器 http developer android com reference and
  • 恐慌:缺少“x86”CPUS 的模拟器引擎程序

    我正在尝试运行我的第一个 Android Hello World 程序 但在这样做时 Android studio 给出了一个错误 以下是所有详细信息 IDE Android Studio 操作系统 OSX 版本 10 9 5 命令 Use
  • android中如何释放内存避免内存泄漏

    While going through the android developer site i found this 它说为了避免内存泄漏 我们应该在 onStop 中释放资源 但如何做到这一点 基本上 任何被正确清空的对象都被视为已释放
  • LoaderManager 不接受“这个”

    好吧 我投降 我想不明白 我正在学习 Udacity 的 Android 基础知识课程 需要了解如何使用加载器加载数据 但是 当我使用以下行时 this 以红色突出显示并显示以下错误 Wrong 3rd argument type Foun
  • onCheckedChanged 自动调用

    我在回收器视图中有一个开关 从数据库检索数据后 数据显示在回收器视图中 当回收器视图打开时 我读取数据库 如果数据库中的字段为 Y 我启用开关 否则禁用开关 现在的问题是 onCheckedchanged 监听器也被调用 我希望仅当用户手动
  • 如何获取拍摄照片的uri?

    我想实现什么目标 我想获取捕获图像的 URI 并将其保存在 Firebase 上 我尝试了什么 首先我需要打开相机 下面我是如何做到的 Intent cameraIntent new Intent android provider Medi
  • 颜色资源 ID 返回错误值

    我试图在 onCreate 期间以编程方式从颜色资源设置文本颜色 但得到了一些奇怪的结果 我在 res colors xml 中定义了一个颜色资源
  • 注册到 gcm 时获取空设备 ID

    GCMRegistrar checkDevice this GCMRegistrar unregister this GCMRegistrar checkManifest this if GCMRegistrar isRegistered
  • 即使在 goOffline() 和 keepSynced(false) 之后,Firebase 数据库仍然有少量下载

    即使在 goOffline 和 keepSynced false 之后 我的 Firebase 数据库仍然有少量下载 我只想获取一次数据 然后我将其保存到 SharedPreferences 中 下次用户运行应用程序时 它将检查 Share
  • 动画片段和返回堆栈

    我在使用或理解如何弹出时遇到问题 后台堆栈中的 FragmentTransactions 处理自定义 动画 具体来说 我希望它能够调用 out 动画 但是 看来不是 我有一个简单的方法来处理片段事务 FragmentTransaction
  • 使用 Eclipse 测试 PhoneGap 应用程序时不断收到“发生网络错误”

    我刚刚收到分包商提供的 PhoneGap 解决方案 以便在发布前在我的手机上进行测试 我将项目导入到 Eclipse 中 一切看起来都很好 我可以通过打开 index html 文件在我的计算机上本地测试该应用程序 file E AppDe
  • Android:转换为位图时,回收器视图的宽度和高度必须> 0

    在 Sqlite 中存储文本和图像 并尝试将这些数据检索到 recyclerview 中 当将图像显示到 recyclerview 中时 它显示错误宽度和高度必须 gt 0 在将图像保存在 sqlite 中时 我将位图转换为字节 数据库助手
  • 错误:当我添加新的依赖项时,我的项目中的任务“:app:dexDebug”错误执行失败

    我没有在我的项目 在 libs 中 中添加任何库 jar 仅添加此依赖项 我的 build gradle 文件 android compileSdkVersion 23 buildToolsVersion 23 0 1 defaultCon
  • 从自定义标记获取附近的地点

    我有一个标记列表 并且想使用我的标记列表获取附近的地点 我试过检查一下here https stackoverflow com questions 32284708 how to constantly detect nearby marke
  • 运行adb命令时出现错误3221226356

    我在使用 Android ADB 时开始发现问题 本质上 在 Windows 10 计算机上 如果我在命令行运行 adb exe P 5037 s emulator 5554 shell getprop ro build version s
  • 用于代码生成的 ANTLR 工具版本 4.5.3 与当前运行时版本 4.7.1 不匹配

    我在 DataBindingMapperImpl java 中遇到一个特定数据绑定的错误 这会在构建项目时导致以下错误 用于代码生成的 ANTLR 工具版本 4 5 3 与当前运行时版本 4 7 1 不匹配 用于解析器编译的 ANTLR 运
  • EditText 的椭圆形

    EditText 的椭圆尺寸仅适用于 输入类型 无 可编辑 false 但这使我的 EditText 无法编辑 考虑到本地化 如何处理这个问题 预期行为 EditText 中的文本应以省略号显示 EditText 应该是可编辑的 尝试过这些
  • TypeConverters 无法弄清楚如何将此字段保存到数据库中

    我在实现 Room 的类型转换器时遇到错误 错误 无法弄清楚如何将此字段保存到数据库中 您可以考虑为其添加类型转换器 private java util List
  • Android:永久保存文件(即使在清除数据/卸载后)

    我想知道是否有一种方法可以永久存储少量数据 永久我的意思是即使用户清除应用程序数据 卸载应用程序 我也希望数据保留下来 我知道当用户清除应用程序数据 卸载应用程序时 共享首选项和数据库将被删除 我也知道我可以在 SD 卡上保存内容 但是如果

随机推荐

  • asm:常用语法

    常用语法 1 循环 1 1 使用条件跳转指令实现循环 1 2 使用LOOP指令实现循环 2 字符串 2 1 指定字符串的长度 2 2 字符串指令 2 3 重复前缀 3 数组 4 递归 5 宏 6 文件操作 7 内存管理 1 循环 1 1 使
  • 2023年美赛五大热点问题(赛前准备、报名、选题、评审、查询)全面解读!

    思路 永久更新 全网最新最全 持续更新中 查看最下方QQ群获取 2023年美赛五大热点问题全面解读 赛前准备 报名 选题 评审 查询 一 赛前准备 硬实力准备 1 学习常用模型 算法 并进行实战建模练习 学习常用模型的原理 并分别进行应用练
  • 应用层——域名系统DNS

    认识DNS 我们平常在访问某个网站的时候不使用IP地址 而是使用一串有罗马字和点号组成的字符串 而一般用户在使用TCP IP进行通信的时候也不实用IP地址 能够这样做是因为有了DNS Domain Name System 功能的支持 DNS
  • 在Ubuntu 18.04 中设置开机自动执行脚本

    Ubuntu18 04 不能像16 04 那样可以直接使用 etc rc local 文件 需要设置 1 建立 rc local service 文件 sudo vim etc systemd system rc local service
  • 【Vue2.0源码学习】实例方法篇-生命周期相关方法

    文章目录 0 前言 1 vm mount 1 1 用法回顾 1 2 内部原理 2 vm forceUpdate 2 1 用法回顾 2 2 内部原理 3 vm nextTick 3 1 用法回顾 3 2 JS的运行机制 3 3 内部原理 能力
  • 时空猎人服务器维护中是什么意思,时空猎人玩家自助FAQ问题汇总新手必备

    玩家自助FAQ问题汇总新手必备 你总能碰到各种各样的游戏问题 或机型问题 这里整理了一个常见问题解决办法 FAQ 可以帮忙大家 一 运行时程序异常退出建议玩家按照以下方式处理 1 清理缓存 关闭空闲软件 再次登录游戏 2 如果问题反复出现建
  • java8_02_stream(一)创建流和中间操作

    Stream 主要分为三部分 1 创建流 2 中间操作 3 终止操作 一 创建流的四种方法 Collection系列集合的stream parallelStream 方法 Stream stringStream list stream Ar
  • 在 ASP.NET Core 应用程序启动时运行代码的 3 种方法

    开发人员应该将初始化内存缓存的代码放在哪里 开发人员可能会发现有必要在 ASP NET Core 应用程序启动时只执行一次代码 例如 开发人员可能需要填充内存缓存 运行后台任务 从某些外部源读取配置 发布应用程序成功启动的事件等 ASP N
  • 序列化工具

    import java io ByteArrayInputStream import java io ByteArrayOutputStream import java io Closeable import java io ObjectI
  • 详解JavaScript中的Event Loop(事件循环)机制

    转载 javascript从诞生之日起就是一门单线程的非阻塞的脚本语言 单线程意味着 javascript代码在执行的任何时候 都只有一个主线程来处理所有的任务 而非阻塞则是当代码需要进行一项异步任务 无法立刻返回结果 需要花一定时间才能返
  • nginx下载并安装

    一 nginx简介 什么是 nginx 和可以做什么事情 Nginx 是高性能的 HTTP 和反向代理的web服务器 处理高并发能力是十分强大的 能经受高负 载的考验 有报告表明能支持高达 50 000 个并发连接数 其特点是占有内存少 并
  • python 贪吃蛇小游戏代码

    usr bin python coding UTF 8 作者 黄哥 链接 https www zhihu com question 55873159 answer 146647646 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权
  • 再见!微软官宣放弃Mac 版 Visual Studio IDE

    程序员的成长之路 互联网 程序员 技术 资料共享 关注 阅读本文大概需要 5 分钟 来自 撰稿丨千山 对于Visual Studio 只要是开发者 或多或少都接触过 发布于1997年的Visual Studio标志着微软第一次将这么多开发工
  • 关系代数之专门的关系运算(选择、投影)

    选择 选择运算是从指定的关系中选出满足给定条件 用逻辑表达式表达 的元组而组成一个新的关系 进行选择运算的对象是 一个关系当中某一个属性的值 选择运算是将一张表当中的某一属性进行筛选 比如 将性别 sex 这列当中性别为女的元组筛选出来组成
  • constraint的一些用法总结

    主要就是增加约束的 以下几种约束 并 一一列举 1 主键约束 要对一个列加主键约束的话 这列就必须要满足的条件就是分空 因为主键约束 就是对一个列进行了约束 约束为 非空 不重复 以下是代码 要对一个列加主键 列名为id 表名为emp 格式
  • 刷脸支付:双12刷脸支付5折省翻天,政策持续补贴预热双十二

    刷脸支付成潮流 三家巨头争江山 刷脸支付的使用场景正在深入拓展 进入每一个与人民生活息息相关的行业 在政府综合政务 社会公交运输 商超营销运营 酒店景区服务等各方面都出现了刷脸支付的身影 我们能够看到 科技是在进步的 社会是在进步的 二维码
  • Caffe2——cifar10数据集创建lmdb或leveldb类型的数据

    cifar10数据集和mnist数据集存储方式不同 cifar10数据集把标签和图像数据以bin文件的方式存放在同一个文件内 这种存放方式使得每个子cifar数据bin文件的结构相同 所以cifar转换数据代码比mnist的代码更加的模块化
  • Vue项目提示 doesn‘t work properly without JavaScript enabled. Please enable it to continue

    由于本地是用docker部署了一套微服务 为了避免跨越问题 前端使用的nginx配置转发后端路径 访问返回状态时200 但是在response返回We re sorry but doesn t work properly without J
  • 「雕爷学编程」Arduino动手做(37)——MQ-3乙醇易燃气酒精传感器模块

    37款传感器与模块的提法 在网络上广泛流传 其实Arduino能够兼容的传感器模块肯定是不止37种的 鉴于本人手头积累了一些传感器和模块 依照实践出真知 一定要动手做 的理念 以学习和交流为目的 这里准备逐一动手试试做实验 不管成功与否 都
  • Android studio心得——fragment动态加载

    前言 在Android应用程序中 Fragment是一种可以嵌入Activity中的组件 通过 Fragment 我们可以将UI 目录 前言 一 什么是Android Studio 二 简介Fragment 三 学期知识汇总 四 什么是碎片