Android Studio 学习记录:第四天

news/2025/3/16 13:03:30/文章来源:https://www.cnblogs.com/mlo9i/p/18774796

一、回顾与总结
在前三天的学习中,我逐步掌握了 Android Studio 的项目结构、布局设计(线性布局、相对布局、ConstraintLayout)、基本 UI 组件的使用(TextView、Button、EditText、ImageView)、事件处理机制以及简单的数据存储(SharedPreferences)。这些知识让我对 Android 开发有了更深入的理解,并能够实现简单的交互功能。今天,我将继续深入学习 Android 开发的核心内容,包括 Fragment 的使用和 RecyclerView 的实现。


二、学习目标

• 深入学习 Fragment 的使用:掌握 Fragment 的生命周期、创建和管理方法,以及与 Activity 的交互。

• 学习 RecyclerView 的使用:掌握 RecyclerView 的基本用法,实现列表数据的动态显示。

• 理解 Fragment 和 RecyclerView 的结合使用:通过实际案例,实现一个包含 Fragment 和 RecyclerView 的简单应用。


三、Fragment 的使用

(一)Fragment 的概念
Fragment 是一种可以在 Activity 中复用的 UI 片段,类似于一个“迷你 Activity”。它可以有自己的布局和生命周期,并且可以与 Activity 交互。

(二)Fragment 的生命周期
Fragment 的生命周期与 Activity 类似,但更加复杂。主要生命周期方法包括:

onAttach(Context context):Fragment 与 Activity 关联时调用。

onCreate(Bundle savedInstanceState):创建 Fragment 时调用。

onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState):创建 Fragment 的视图时调用。

onActivityCreated(Bundle savedInstanceState):Activity 的onCreate()方法执行完成后调用。

onStart()onResume()onPause()onStop()onDestroyView()onDestroy()onDetach():与 Activity 的生命周期方法类似。

(三)创建 Fragment

• 创建 Fragment 类:

   public class MyFragment extends Fragment {@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {// 加载布局文件return inflater.inflate(R.layout.fragment_my, container, false);}}

• 创建 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"android:padding="16dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="This is a Fragment" /></LinearLayout>

• 在 Activity 中添加 Fragment:

• 静态添加:通过 XML 布局文件直接添加。

     <fragmentandroid:name="com.example.MyFragment"android:id="@+id/my_fragment"android:layout_width="match_parent"android:layout_height="match_parent" />```• 动态添加:通过代码动态添加 Fragment。```javaFragmentManager fragmentManager = getSupportFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();MyFragment myFragment = new MyFragment();fragmentTransaction.add(R.id.fragment_container, myFragment);fragmentTransaction.commit();```• Fragment 与 Activity 的交互:• Fragment 可以通过`getActivity()`方法获取与之关联的 Activity。• Activity 可以通过`FragmentManager`获取 Fragment 的实例。(四)今日收获• 理解了 Fragment 的概念和生命周期。• 掌握了 Fragment 的创建方法,包括静态添加和动态添加。• 学会了 Fragment 与 Activity 的交互方式。---四、RecyclerView 的使用(一)RecyclerView 的概念
RecyclerView 是 Android 中用于显示列表数据的组件,它比传统的`ListView`更灵活、更高效,支持多种布局方式(如线性布局、网格布局等)。(二)RecyclerView 的基本使用• 添加依赖:
在`build.gradle`文件中添加 RecyclerView 的依赖:```gradleimplementation 'androidx.recyclerview:recyclerview:1.3.0'

• 创建 RecyclerView 的布局:

   <androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent" />

• 创建适配器(Adapter):
适配器用于将数据绑定到 RecyclerView 的每个条目中。

   public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {private List<String> dataList;public MyAdapter(List<String> dataList) {this.dataList = dataList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {holder.textView.setText(dataList.get(position));}@Overridepublic int getItemCount() {return dataList.size();}public static class ViewHolder extends RecyclerView.ViewHolder {TextView textView;public ViewHolder(@NonNull View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}}}

• 创建条目布局文件:

   <!-- res/layout/item_layout.xml --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="16dp"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Item" /></LinearLayout>

• 在 Activity 中设置 RecyclerView:

   public class MainActivity extends AppCompatActivity {private RecyclerView recyclerView;private MyAdapter adapter;private List<String> dataList;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);recyclerView = findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(this));dataList = new ArrayList<>();for (int i = 0; i < 50; i++) {dataList.add("Item " + i);}adapter = new MyAdapter(dataList);recyclerView.setAdapter(adapter);}}

(三)今日收获

• 理解了 RecyclerView 的基本概念和优势。

• 掌握了 RecyclerView 的基本使用方法,包括适配器的创建和数据绑定。

• 学会了如何实现简单的列表显示。


五、Fragment 和 RecyclerView 的结合使用
为了巩固所学知识,我尝试开发了一个简单的应用,该应用包含一个 Fragment,Fragment 中使用 RecyclerView 显示列表数据。

(一)项目结构

MainActivity:主 Activity,用于加载 Fragment。

MyFragment:包含 RecyclerView 的 Fragment。

MyAdapter:RecyclerView 的适配器。

• 布局文件:activity_main.xmlfragment_my.xmlitem_layout.xml

(二)实现代码

MainActivity

   public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);if (savedInstanceState == null) {getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, new MyFragment()).commit();}}}

MyFragment

   public class MyFragment extends Fragment {private RecyclerView recyclerView;private MyAdapter adapter;private List<String> dataList;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_my, container, false);recyclerView = view.findViewById(R.id.recyclerView);recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));dataList = new ArrayList<>();for (int i = 0; i < 50; i++) {dataList.add("Item " + i);}adapter = new MyAdapter(dataList);recyclerView.setAdapter(adapter);return view;}}

• 布局文件:

activity_main.xml

     <FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/fragment_container"android:layout_width="match_parent"android:layout_height="match_parent" />```• `fragment_my.xml`:```xml<androidx.recyclerview.widget.RecyclerViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="match_parent

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899768.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI编程:最疯狂的MCP服务器你一定要试试

我还记得我第一次听说MCP(模型上下文协议)的时候,我心想: “哈?又一个花里胡哨的缩写,这个世界已经快被这些缩写淹没了!” 但当我意识到MCP就像AI界的通用连接器——就像USB-C之于手机和笔记本电脑——我瞬间兴奋了。 再也不用折腾那些只能在某个地方工作的插件或奇怪的…

20241217实验一《Python程序设计》实验报告

20241217 2024-2025-2 《Python程序设计》实验一报告 课程:《Python程序设计》 班级: 2412 姓名: 黄迅 学号:20241217 实验教师:王志强 实验日期:2025年3月12日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能;(编写书中的程序…

域自适应

信息时代产生的大量数据使机器学习技术成功地应用在许多领域。大多数机器学习技术需要满足训练集与测试集独立同分布的假设,但在实际应用中这个假设很难满足。 域适应是一种在训练集和测试集不满足独立同分布条件下的机器学习技术。一般情况下的域适应只适用于源域目标域特征空…

JDK8-时间格式化类-时区类-工具类--java进阶day07

1.时间格式化类:DateTimeFormatter1.创建方式 使用DateTimeFormatter调用ofPattern方法即可. 2.格式化方法创建好DateTimeFormatter对象后,调用format方法,将要格式化的日期对象放入即可.3.日期字符串解析 将一个日期字符串变为日期,需要用到日历类对象,调用它的parse方法…

无人机仿真环境介绍及其配置

博客地址:https://www.cnblogs.com/zylyehuo/参考 https://space.bilibili.com/393165606/channel/collectiondetail?sid=1750583&spm_id_from=333.788.0.0仿真器 VS 模拟器目录为什么要学习 ROS 发展现状课程介绍ROS 是什么 历史起源总体设计 一个目标五个特点点对点的设…

为什么 AI 在处理新闻方面如此糟糕

托马斯史密斯插画来源:Ideogram新闻流淌在我的血液里。我的日常工作是一家新闻摄影机构的负责人,而我的主网站是一个专注于旧金山湾区新闻的站点。 我与新闻内容息息相关,所以我对 AI 在处理新闻方面的糟糕表现感受尤为深刻。 哥伦比亚新闻评论(Columbia Journalism Review…

活动回顾 - 《开源智能搜索与知识库管理 - Coco AI》直播活动圆满结束,附 PPT 下载与视频回放

2025 年 03 月 07 日,由搜索客社区和极限科技(INFINI Labs)联合举办的第 7 期线上 Meetup 技术交流直播活动圆满结束。本期 Meetup 直播活动吸引了超过 700+ 技术爱好者观看参与,活动主要介绍了极限科技新推出并正在研发的开源智能搜索产品 Coco AI 的技术特点和应用场景,…

一文带你搞懂SpringBoot项目实现自动化部署

前言要实现springboot项目自动化部署,需要了解下面四个技术点:SpringBoot Profiles Maven命令 Jenkins的使用 Shell脚本下面我们会一一来介绍这四个技术点,最后用一个综合事例来给大家呈现springboot项目的自动化部署。1. SpringBoot Profilesprofiles 是 Spring 框架的一种…

centos更改命令提示符颜色

PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"永久生效vim /etc/profile.d/test.sh PS1="\[\e[1;32m\][\t \[\e[1;33m\]\u\[\e[35m\]@\h\[\e[1;31m\] \W\[\e[1;32m\]]\[\e[0m\]\\$"效果: PS1的定义中个常…

P1600 [NOIP 2016 提高组] 天天爱跑步解析

思维难度:cf2300+ 实现方案:贡献计算 方法:线段树合并或者树上差分+桶的统计 思路点补充: 按照题目的设定,如果一个观察员 \(j\) 能够观察到某个人经过,说明 \(j\)一定在第 \(i\)个人的路径上。 树上的路径是唯一确定的,由此可以得到两种情况。 情况一:观察员 \(j\) 此…

C#语言碎片:Switch-Case语句字符串匹配

Switch case语句在处理字符串类型匹配时候,case条件需要设置为静态常量或者一个具体的字符串:因为工具类ToolHand.Name 为变量,所以编译不通过。 使用if语句来逐个判断:看AI对此的解释:C#的switch语句在条件匹配之所以要用静态常量是因为,编译时常量(const)在编译时就被…

TaskPyro:一个轻量级的 Python 任务调度和爬虫管理平台

爬虫管理系统,爬虫管理平台,可视化操作,完整监控,灵活的Python环境管理,,环境隔离,资源占用小,支持 Scrapy 等主流爬虫框架,支持 Selenium、Playwright、DrissionPage 等浏览器自动化工具,支持node环境下的js逆向代码前言 推荐一款本人在使用的Python爬虫管理平台,亲测不错!!…