【Android学习笔记】activity使用和相关的重要类

news/2024/12/27 4:25:09/

>建立配置和使用Activity

  • activity能够提供许多不同的操作页面,它们做成Activity栈,当前活动的应用位于栈顶。

  • LauncherActivity&&ArrayAdapter

每一个列表项对应一个intent,用于保存启动不同的activity的相关信息。

intentForPostion()提供了位置和不同activity对应的信息,将列表项链接到制定的intent。

  • ExpandableListActivity&&ExpandableListAdapter

设置界面显示过程中,使用了适配器的相关函数,其中复写的函数能够自动调用生成相应的界面。

  • getChild()获得子字表的内容

    • getChildID()获得子表的id

    • getChildrenCount()获得子表的项目数量

    • TextView()获得每个子表的textView配置

    • getChildView()获得每个子表的textView内容

    • getGroup()获得主表

    • getGroupCount()获得主表的数量

    • getGroupId()获得主表的id

    • getGroupView()决定主表的外观

    • isChildSelectable()返回被选中的子表像

    • hasStableIds()返回id

当在ExpandableListActivity中定义Adapter时,这些函数必须都被复写,保证能够生成一个新的列表,就相当于XML对应的配置属性一样,这样才能完整的显示整个表格。

  • PreferenceActivity&&PreferenceFragment

    1. 实现了参数设置界面,让Fragment集成了PreferenceFragment

    2. 在onCreate中调用addPreferencFromResource()方法,加载制定的界面布局文件。

  • 在manifest.xml中配置多个Activity资源

    1. 配置多个Activity:

<activity android:name=“.MainActivity” android:label=“@string/app_name”
android:theme=“@style/AppTheme.NoActionBar”> <intent-filter> <action
android:name=“android.intent.action.MAIN” /> <category
android:name=“android.intent.category.LAUNCHER” /> </intent-filter>
</activity>

  • 1

    • 2

      • 3

      • 4

      • 5

      • 6

      • 7

      • 8

      • 9

      • 10

>启动和关闭Activity

  • 启动activity的两种方法

    • context.startActivity(intent)

    • context.startActivity(intent,int)

  • 关闭Activity的两种方法

    • context.finish()

    • context.finishActivity(int)

  • 代码示例

Intent intent = new Intent(MainActivity.this,SecondActivity.class);

startActivity(intent);

>使用Bundle向指定的activity传递数据

  • intent携带额外数据的方法

    • putExtras(Bundle)

    • getExtras()

    • putExtra()

    • getXxxExtra()

    • putXXX(String,XXX)

    • putSeriaLizable(String,Srializagle)

    • getXXX(String)

    • getSerializable(String,Serializable)

  • 使用bundle和intent机制向指定的activity传递数据的方法

    • 定义方法,向介质添加批数据并且将介质传递给目标activity

Person p = new
Person(name.getText(),toString(),passwd.getText().toString(),gender); Bundle
data = new Bundle(); data.putSerializable("person),p); Intent intent = new
Intent(MainActivity.this,ResultActivity.class); intent.putExtras(data);
startActivity(intent);

  • 1

    • 2

      • 3

      • 4

      • 5

      • 6

    • 使用方法,从传递过来的intent中提取数据

Intent intent = getIntent();Person p = (Person)
intent.getSerializableExtra(“person”);

  • 1

    • 2

>启动Activity并且获取返回结果

  • 当前的Activity启动另一个Activity获取它的结果并且返回到当前的Activity。

  • 实现方法

重写onActivityResult(int requestCode,int resultCode,intent
intent)方法(相当于一种回调方法)当被启动的Activity生命周期结束并且返回结果时,该方法将会被触发。

  • 实现过程

    1. 用特殊函数启动另外的activity

Intent intent = new Intent(MainActivity.this,ResultActivity.class);

intent.putExtras(data);

startActivityForResult(intent,0);

  1. 当activity结束时,触发onActivity函数,需要重写它。

    1. 在另外的activity中仍旧需要bundle和intent进行配合传递数据

      对类的补充:

Intent类(交互介质)

  • Intent类作用

每个应用程序都有若干个Activity组成,每一个Activity都是一个应用程序与用户进行交互的窗口,呈现不同的交互界面。因为每一个Acticity的任务不一样,所以经常互在各个Activity之间进行跳转,在Android中这个动作是靠Intent来完成的。你通过startActivity()方法发送一个Intent给系统,系统会根据这个Intent帮助你找到对应的Activity,即使这个Activity在其他的应用中,也可以用这种方法启动它。

  • Intent的定义:

Intent是Android系统用来抽象描述要执行的一个操作,也可以在不同组件之间进行沟通和消息传递。

Intent意图可以是明确的指定组件的名称,这样你可以精确的启动某个系统组件,比如启动一个Activity。它也可以是模糊的,没有指定组件名称,只要是能够匹配到这个Intent的应用都可以接收到,比如发送一个拍照Intent,所有的拍照应用都会响应。

  • Intent有以下几个属性:

动作(Action),数据(Data),分类(Category),类型(Type),组件(Compent)以及扩展信(Extra)。其中最常用的是Action属性和Data属性。

Bundle类(批数据,是一个键值对)

  • Bundle类的作用

Bundle主要用于传递数据;它保存的数据,是以key-value(键值对)的形式存在的。我们经常使用Bundle在Activity之间传递数据,传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。当Bundle传递的是对象或对象数组时,必须实现Serializable
或Parcelable接口。下面分别介绍Activity之间如何传递基本类型、传递对象。

  • Bundle的定义和使用

    • 新建一个bundle类

view plain copy

Bundle mBundle = new Bundle();

  • bundle类中加入数据(key
    -value的形式,另一个activity里面取数据的时候,就要用到key,找出对应的value)

view plain copy

mBundle.putString(“Data”, “data from TestBundle”);

  • 新建一个intent对象,并将该bundle加入这个intent对象

view plain copy

Intent intent = new Intent();

intent.setClass(TestBundle.this, Target.class);

intent.putExtras(mBundle);

  • Bundle提供了各种常用类型的putxxx()/getxxx()方法,用于读写基本类型的数据。

Context类的(主体上下文)

  • Context类的定义

Interface to global information about an application environment. This is an
abstract class whose implementationis provided by the Android system. It allows
access to application-specific resources and classes, as well as up-calls for
application-level operations such as launching activities, broadcasting and
receiving intents, etc

  • Context使用场景

    1. 它描述的是一个应用程序环境的信息,即上下文。

    2. 该类是一个抽象(abstract
      class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。

    3. 通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息

  • Context类图集成关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EedUqbTK-1687872462351)(media/a0889d3344d2955e66de11c0646a0a10.gif)]

context类图继承关系

  • Context相关的方法

    • getSystemService(String)获得系统级服务

    • startActivity(Intent)启动一个Activity

    • startService(Intent)启动一个service

    • getSharedPreferences(String, int)

  • Context什自己的理解

Context类相当于一个上下文环境,能够很好的统筹一个Activity、service或者app的资源和调度方式,他是负责指挥这些资源的类的接口,他能启动关闭一个app等。

Serializable类

序列化的内容补充

当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
把Java对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为Java对象的过程称为对象的反序列化。

  • Serializable接口的定义

为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object
states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。

  • 使用情况

    • 当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;

    • 当你想用套接字在网络上传送对象的时候;

    • 当你想通过RMI传输对象的时候;

  • Parcelable和Serializable的区别

内存间数据传输时推荐使用Parcelable,activity间传输数据使用Parcelable,是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC)

保存到本地或者网络传输时推荐使用Serializable

Parcelable类

  • Parcelable类的作用

想要在两个activity之间传递对象,那么这个对象必须序列化,Android中序列化一个对象有两种方式,一种是实现Serializable接口,这个非常简单,只需要声明一下就可以了,不痛不痒。但是android中还有一种特有的序列化方法,那就是实现Parcelable接口,使用这种方式来序列化的效率要高于实现Serializable接口。不过Serializable接口实在是太方便了,因此在某些情况下实现这个接口还是非常不错的选择。

  • Parcelable类的使用情况

    • 永久性保存对象,保存对象的字节序列到本地文件中;

    • 通过序列化对象在网络中传递对象;

    • 通过序列化在进程间传递对象。

  • Parcelable接口定义

public interface Parcelable

{

//内容描述接口,基本不用管

public int describeContents();

//写入接口函数,打包

public void writeToParcel(Parcel dest, int flags);

//读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入

//为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例

public interface Creator<T>

{

public T createFromParcel(Parcel source);

public T[] newArray(int size);

}

}

  • 实现序列化的步骤

    1. implements Parcelable

    2. 重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从
      Parcel容器获取数据

    3. 重写describeContents方法,内容接口描述,默认返回0就可以

    4. 实例化静态内部对象CREATOR实现接口Parcelable.Creator


http://www.ppmy.cn/news/611941.html

相关文章

React接入Sentry.js

// 需要安装的库yarn add raven-js --saveyarn add raven-for-redux --save // 在创建store的地方import * as Raven from "raven-js";import * as createRavenMiddleware from "raven-for-redux"; Raven.config("dns", { release: ${版本号}}).…

OpenCV+python:图像金字塔

1&#xff0c;图像金字塔的概念 图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构。应用于图像分割&#xff0c;机器视觉和图像压缩。一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低&#xff0c;且来源于同一张原始图的图像集合。其通过梯次向下采样获…

赋值语句和赋值表达式

学而时习之&#xff0c;温故而知新。 賦值语句将一个值指定给一个变量。在 Java 中賦值语句可以作为一个表达式。 将 作为赋值操作符 &#xff0c;例如 int x 3 注意&#xff1a;要给一个变量陚值&#xff0c;变量名必须在賦值操作符的左边。因此&#xff0c;下面的语句是…

新兴内存技术准备突围

新兴内存技术准备突围 Emerging memory technologies ready to break out 多伦多——新兴记忆技术已经出现了几十年&#xff0c;但是今年由客观分析和考夫林协会发布的《新兴记忆增长》报告显示&#xff0c;新兴记忆技术已经达到了一个临界点&#xff0c;比以往任何时候都更有…

ADC中宽带巴伦的使用

大多数高速ADC使用差分输入结构。 这样会具有良好的共模噪声抑制&#xff0c;但是常常需要在ADC输入端将单端信号转换为差分信号。 这一转换过程&#xff0c;主要选择无源巴伦或变压器及有源放大器来实现。 虽然有很多高性能的组件可用于系统的这一部分&#xff0c;但是即使最佳…

java命名习惯

学而时习之&#xff0c;稳固而知新。 1 变量和方法使用小写字母命名 &#xff08;如果一个名字包含多个单词&#xff0c;就将它们连在一起&#xff0c; 第一个单词的字母小写&#xff0c;而后面的每个单词的首字母大写&#xff0c;例如&#xff0c;变量 radius 和 area&…

OpenCV+python:图像梯度

1&#xff0c;图像梯度的概念 梯度简单来说就是求导&#xff0c;在图像上表现出来的就是提取图像的边缘&#xff08;无论是横向的、纵向的、斜方向的等等&#xff09;&#xff0c;所需要的是一个核模板。模板的不同结果也不同。所以能够看到&#xff0c;全部的这些个算子函数&a…

音频编解码器以50%的功耗提供两倍的音频质量

音频编解码器以50%的功耗提供两倍的音频质量 Audio codecs deliver twice the audio quality at 50% less power Dialog的DA740x音频编解码器面向中高端耳机市场&#xff0c;也需要较少的外部组件 Dialog Semiconductor最近发布了其新的DA740x系列高度集成音频编解码器的前三…