9.安卓逆向-安卓开发基础-安卓四大组件2

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:8.安卓逆向-安卓开发基础-安卓四大组件1

接着上一个内容继续

实现一个两个Activity跳转

首先创建两个Activity,如下图创建两个Empty Activity

第一个

第二个

达到的效果是从第一个跳转到第二个里面

第一个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=".tiaozhuan1"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><TextViewandroid:id="@+id/tv1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="30sp"android:gravity="center"android:text="这里是第一页"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btn1"android:textSize="30sp"android:layout_centerHorizontal="true"android:layout_below="@+id/tv1"android:text="点击我跳转到第二页"/></RelativeLayout></LinearLayout>

第一个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=".tiaozhuan2"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"><TextViewandroid:id="@+id/tv2"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="30sp"android:gravity="center"android:text="这里是第二页"/><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/tv2"android:layout_centerHorizontal="true"android:textSize="30sp"android:text="点击返回第一页"/></RelativeLayout></LinearLayout>

第二个Activity效果:

跳转的代码

首先是第一个跳转到第二个,获取第一个Activity里面的一个按钮点击的时候调用startActivity函数切换

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class tiaozhuan1 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tiaozhuan1);Button button = findViewById(R.id.btn1);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(tiaozhuan1.this, tiaozhuan2.class);startActivity(intent);}});}
}

第二个Activity的核心代码获取第一个Activity里的一个按钮然后点击时让它调用finish函数就可以再返回到第一个Activity了

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class tiaozhuan2 extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_tiaozhuan2);Button button = findViewById(R.id.btn2);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}

然后修改清单文件

上图的清单文件点运行时会编译报错,下图红框的文件全报错

报错原因是忘记改下图红框的东西了

改完再点运行,就会正常了

效果点击下图红框的按钮

回来到下图的界面(Activity)

点击下图红框的按钮

会返回到第一个界面(Activity)

接下来做一个列表和搜索列表功能

首先创建一个Empty Activity

然后搜索框也就是输入框之前写过,然后搜索按钮就是个按钮之前也写过,然后列表之前没写过,列表使用ListView

ListView是一种常见的用户界面控件,用于在移动应用程序中展示大量数据。它能够以列表的形式显示数据,并且支持滚动和快速定位到特定条目。ListView 在移动应用开发中非常常见,特别是在 Android 平台上。ListView通常会和适配器(Adapter)一起使用,适配器负责将数据绑定到ListView上

<ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="wrap_content"/>

现在的界面和对应代码

然后创建一个类,名字叫 MyAdapter

然后它的内容

// 继承BaseAdapter:MyAdapter类继承自BaseAdapter,这是Android中适配器类的基类,用于将数据与视图绑定在一起。
public class MyAdapter extends BaseAdapter {// 成员变量 mData:MyAdapter类包含一个名为mData的List<String>类型的成员变量,用于存储要展示的数据。
private List<String> mData;// MyAdapter类有一个构造方法,接受一个List<String>类型的参数 data,用于初始化 mData 成员变量。
public MyAdapter(List<String> data) {mData = data;
}// mData中数据的数量,即列表项的个数。
@Override
public int getCount() {return mData.size();
}// 根据位置返回对应的数据项。
@Override
public Object getItem(int position) {return mData.get(position);
}// 返回指定位置的行ID,通常直接返回position。
@Override
public long getItemId(int position) {return position;
}// 通过convertView参数 将数据填充到视图中,并返回给列表进行显示
// 这里的position表示列表项在数据源中的位置,convertView表示当前可重用的视图对象,而parent表示列表的父容器。
@Override
public View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);}TextView textView = convertView.findViewById(android.R.id.text1);textView.setText(mData.get(position));return convertView;
}
}

然后使用,可以看出下图蓝框里给 ListView 添加了六条数据

package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;import java.util.Arrays;
import java.util.List;public class liebiao extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_liebiao);EditText editText = findViewById(R.id.editText1);Button mButton = findViewById(R.id.button1);ListView listView = findViewById(R.id.listView);// 安卓开发提供的
//        String[]data = {"数据1","数据2","数据3","数据4","数据5","数据6"};
//        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
//        listView.setAdapter(adapter);// 我们自己实现的List<String> datas = Arrays.asList("数据1","数据2","数据3","数据4","数据5","数据6");MyAdapter myAdapter = new MyAdapter(datas);listView.setAdapter(myAdapter);
}
}package com.example.course1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;import java.util.Arrays;
import java.util.List;public class liebiao extends AppCompatActivity {@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_liebiao);EditText editText = findViewById(R.id.editText1);Button mButton = findViewById(R.id.button1);ListView listView = findViewById(R.id.listView);// 安卓开发提供的
//        String[]data = {"数据1","数据2","数据3","数据4","数据5","数据6"};
//        ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
//        listView.setAdapter(adapter);// 我们自己实现的List<String> datas = Arrays.asList("数据1","数据2","数据3","数据4","数据5","数据6");MyAdapter myAdapter = new MyAdapter(datas);listView.setAdapter(myAdapter);
}
}

修改资源文件

它会根据getCount函数返回的数字从而确定展示几条数据,如下图,这样可以做分页

如果不会搞 ListView+功能描述,这样的关键字去百度搜索,会找到别的大哥写好的代码,拿来直接用就好,所以百度找来的代码不需要看懂只需要会用就行,后面写多了慢慢就能看懂,没必要非要逼着自己看懂,会用就行

然后是后台(Service)这个不重要,后面用到了会细写

Serviceandroid系统的四大组件之一,是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序

BroadcastReceiver

BroadcastReceiver(广播接收器)是Android系统的四大组件之一,用于监听 / 接收 应用发出的广播消息,并做出响应

应用场景:不同组件之间通信(包括应用内 / 不同应用之间);与 Android 系统在特定情况下的通信(如当电话呼入时、网络可用时);多线程通信

Android广播分为两个角色:广播发送者、广播接收者

Content Provider

Content Provider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口

Android系统为一些常见的数据类型(如音乐、视频、图像、手机通信录联系人信息等)内置了一系列的Content Provider,这些都位于android.provider包下

然后后面要用到Python

Python环境搭建:https://blog.csdn.net/2401_85903292/article/details/140873025 看这个大哥写的,也可以自己找,通过 Python和PyCharm环境搭建关键字找,这里的PyCharm是用来写Python代码的,Python是用来运行Python代码的

上方的代码不全,只有手写的代码

完整代码:

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[云服务器13] 如何正确选择云服务器?

【非广告&#xff0c;仅提供建议&#xff0c;没有强制消费引导】 这期我们不讲搭建教程了&#xff0c;因为我想到前面12篇的教程&#xff0c;有关套餐配置的教程好像都有点敷衍…… 所以这期我们主要来说一说服务器的配置选择和不同配置的应用场景。 网站: 雨云 打开后&…

基于ZigBee的农业大棚信息采集系统设计

过去的农业大棚种植中大多需要依靠经验来实现浇水施肥等工作&#xff0c;无法根据天气的变化做出顺应的改变&#xff0c;也就造成了大棚内种植农作物的产量和质量很难得到保证。伴随着物联网与农业种植的结合&#xff0c;基于ZigBee通信和传感器等技术开发一款能监测大棚内环境…

Linux:路径末尾加/和不加/的区别

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 普通文件操作 首先说明这个问题只会出现在目录和符号链接中&#xff0c;因为如果想要索引普通文件但却在路径末尾加/则会出现错误&#xff0c;如例1所示。 # 例1 zhang…

free源码

文章目录 free源码调试main_arena结构&#xff1a;free_hooktcachetcache的结构free_chunk进入tcache&#xff1a; fastbinunlink 合并top free源码调试 main_arena结构&#xff1a; 整体看一下main_arena的结构&#xff1a; free_hook free_hook&#xff0c;在glibc-2.3…

在 Windows 11 中,可以通过修改注册表来更改系统的自动更新时间设置

regedit 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings FlightSettingsMaxPauseDays 36524

AI少女/HS2甜心选择2 仿崩铁人物卡全合集打包

内含AI少女/甜心选择2 仿崩铁【崩坏 星穹铁道 】角色卡全合集打包共6张 内含&#xff1a;布洛妮娅镜流卡芙卡希儿停云银狼 下载地址&#xff1a; https://www.51888w.com/375.html 部分演示图&#xff1a;

项目第六弹:虚拟机管理模块、路由匹配模块

项目第六弹&#xff1a;虚拟机管理模块、路由匹配模块 一、虚拟机管理模块的设计1.什么是虚拟机&#xff1f;2.借助MySQL来理解一下3.如何整合&#xff1f;【埋下伏笔】 二、RabbitMQ为何要有虚拟机1.从业务角度来讲2.步步探索1.优点2.结合业务适用场景和需求3.发掘真正的原因4…

NoSql数据库Redis知识点

数据库的分类 关系型数据库 &#xff0c;是建立在关系模型基础上的数据库&#xff0c;其借助于集合代数等数学概念和方法来处理数据库 中的数据主流的 MySQL 、 Oracle 、 MS SQL Server 和 DB2 都属于这类传统数据库。 NoSQL 数据库 &#xff0c;全称为 Not Only SQL &a…

Python学习——【4.1】数据容器:list列表

文章目录 【4.1】数据容器&#xff1a;list列表一、数据容器入门二、数据容器&#xff1a;list 列表&#xff08;一&#xff09;列表的定义&#xff08;二&#xff09;列表的下标索引&#xff08;三&#xff09;列表的常用操作&#xff08;1&#xff09;列表的查询功能&#xf…

RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

1.RAGflow简介 全面优化的 RAG 工作流可以支持从个人应用乃至超大型企业的各类生态系统。大语言模型 LLM 以及向量模型均支持配置。基于多路召回、融合重排序。提供易用的 API&#xff0c;可以轻松集成到各类企业系统。支持丰富的文件类型&#xff0c;包括 Word 文档、PPT、exc…

Vue3入门 - ElementPlus中左侧菜单和Tabs菜单组合联动效果

在Vue3中&#xff0c;ElementPlus是使用比较广泛的UI组件库&#xff0c;提供了丰富的界面元素支持项目开发需求。在后台管理系统中&#xff0c;左侧或顶部的菜单栏通常包含多个子菜单项&#xff0c;通过菜单的展开和收缩功能&#xff0c;用户可以方便地查看或隐藏不需要的菜单项…

数字世界中的浪漫:揭秘会跳动的爱心

在编程的世界里&#xff0c;复杂的技术可以与艺术产生美妙的碰撞。无论是通过代码实现动态效果&#xff0c;还是用算法绘制图案&#xff0c;程序员都可以成为数字艺术的创作者。而今天&#xff0c;我们将通过 Python 的强大 GUI 工具库 Tkinter&#xff0c;用简单的代码生成一颗…

U-Boot顶层Makefile详解

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用&#xff0c;方便进一步记录自己的实践总结。 上一章我们详细的讲解了 uboot 的使用方法&#xff0c;其实就是各种命令的使用&#xff0c;学会 uboot 使用以后就可以尝试移植 uboot 到自己的开发…

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…

鸿蒙开发之ArkUI 界面篇 十七 购物综合案例

layoutWeight:子元素与兄弟元素主轴方向按照权重进行分配,参数是联合类型&#xff0c;数字或者是字符串&#xff0c;在指定的空间占多少份额&#xff0c;数字越大&#xff0c;表示在空间中占用的份额越多&#xff0c;如果父容器的子组件没有别的指定&#xff0c;剩下的空间全部…

10分钟一条童装走秀爆款Ai视频,小白轻松上手,新蓝海赛道,竞争小机会多!

今天我要给大家带来一个超级有趣的项目——童装走秀AI视频制作。 这不仅是一个充满创意的项目&#xff0c;而且操作简单&#xff0c;即使是视频制作的新手也能轻松上手。 更重要的是&#xff0c;这个项目竞争小&#xff0c;变现机会多&#xff0c;是进入新蓝海赛道的绝佳机会…

C++类之set与get理解

在类中&#xff0c;我们尝尝将一些变量设置为private或者protect里面&#xff0c;而我们经常会遇到在主函数&#xff08;main.cpp&#xff09;使用到这些private变量&#xff0c;而往往我们会下意识地在主函数直接调用在private里面的变量&#xff0c;但现实比较残酷&#xff0…

【linux】nice命令

Linux中的nice命令是一个强大的工具&#xff0c;用于调整进程的优先级&#xff0c;进而影响它们在CPU上的资源分配和执行顺序。以下是关于nice命令的详细解释&#xff0c;包括其用途、语法、参数、示例以及使用建议。 一、用途 nice命令主要用于控制进程在CPU上的调度优先级&…

K8S介绍+集群部署

Kubernetes介绍 官网&#xff1a;https://kubernetes.io/ 一、应用部署方式演变 1、传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其他技术的参与 缺点&#xff1a;不能为应用程序定义资源使用边界&a…

【论文笔记】BEVNeXt: Reviving Dense BEV Frameworks for 3D Object Detection

原文链接&#xff1a;https://arxiv.org/pdf/2312.01696 简介&#xff1a;最近&#xff0c;在摄像头3D目标检测任务中&#xff0c;基于查询的Transformer解码器正在超越传统密集BEV方法。但密集BEV框架有着更好的深度估计和目标定位能力&#xff0c;能全面精确地描绘3D场景。本…