1.活动的基本用法:

1) 手动创建活动、创建加载布局

2) 在AndroidManifest文件中注册

3) 在活动中添加Button、Toast、Menu

4) 销毁活动

2.Intent

1) 显式intent

2) 隐式intent

3) 关于Intent的其他应用

4) 活动间数据传递

2.1 活动

活动是一种包含用户界面的组件,主要用于和用户进行交互,一个应用程序中可以包括零个或多个活动。

2.2 活动的基本用法

手动创建活动ActivityTest

新建项目—>Add No Empty

2.2.1 手动创建活动

(项目结构 Android—>Project)

1.com.example.activity包—>New—>Activity—>Empty Activity(FirstActivity),不勾选Generate Layout File和Launcher Activity(后续手动完成创建对应的布局文件和设置主活动)。

2.如第一章,项目中的任何活动都应该重写Activity的onCreate( )方法,AS自动完成。

调用了父类的onCreate( )方法。

2.2.2 创建和加载布局

1.app/src/main/res目录—>New—>Directory 新建layout目录

2.Layout目录右键—>New—>Layout resource file 命名为first_layout LinearLayout

在布局中添加按钮

1.first_layout.xml文件中

android:id给当前元素定义一个唯一标识符,之后可以在代码中对这个元素进行操作。

android:layout_width 指定了当前元素的宽度,match_parent表示和父元素一样宽。

android:layout_height 指定了当前元素的高度,wrap_content表示当前元素的高度只要能刚好包含里面的内容就行。

android:text 指定了元素中显示的文字内容。

2.在活动中加载布局

setContentView( )方法给当前的活动加载一个布局,在该方法中,一般传入一个布局文件的id。项目中添加的任何资源都会在R文件中生成一个相应的资源id。只需要调用R.layout.first_layout就可以得到first_layout.xml的布局的id,然后再将该值传入setContentView( )方法即可。

2.2.3 在AndroidManifest文件中注册

1.如上一章,所有的活动都要在AndroidManifest.xml中进行注册才能生效。

实际上,AS已经帮FirstActivity在AndroidManifest.xml中注册过了。

2.程序仍需要配置主活动才可以运行。

<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>

3.运行程序

2.2.4 活动中使用Toast

Toast为Android系统提供的一种提醒方式,在程序中可以将一些短小的信息通知给用户,并在一段时间后自动消失,并且不占用任何屏幕空间。

设置点击按钮出现Toast

1.findViewByView( )方法获取到在布局文件中定义的元素,方法返回的为一个View,需向下转型为Button对象。

2.setOnClickListener( )方法为按钮注册一个监听器,重写onClick( )方法。(快捷键:ctrl+O)。

3.通过静态方法makeText( ) 创建出一个Toast对象,然后调用show( )方法显示。

makeText( ) 传入3个参数。第一个为Context,即Toast要求的上下文。第二个参数为Toast显示的文本内容。第三个参数为Toast显示的时长,可以选择Toast.LENGTH_SHORT和Toast.LENGTH_LONG。

4.运行程序。

2.2.5 在活动中使用Menu

1.res—>New—>Directory menu

2.右击menu—>New—>Menu resource file main

3.main.xml文件中插入

4.FirstActivity中重写onCreateOptionsMenu( )方法,用于显示创建的菜单

  getMenuInflater( )方法得到MenuInflater对象,再调用inflat( )方法给当前活动创建菜单。inflate( )方法接受两个参数,第一个用于指定我们通过哪个资源文件来创建菜单。第二个参数用于指定我们的菜单项将添加到哪一个Menu对象中。

5.定义菜单响应事件,FirstActivity中重写onOptionsItemSelected( )方法。

2.2.6 销毁活动

设置点击按钮,销毁当前活动。

finish( )方法进行销毁,效果和按下Back键一样。

2.3 使用Intent在活动之间交互

2.3.1使用显式Intent

创建SecondActivity,布局文件起名为second_layout,更换second_layout.xml文件中内容为:

定义了按钮2,并且发现它已经被AS注册过了。

SecondActivity不是主活动,所以不需要配置<intent-filter>标签里的内容。

Intent是Android程序各组件之间进行交互的一种重要方式。

用显式Intent方式来启动SecondActivity:

修改FirstActivity中按钮的点击事件

Intent(Context packageContext, Class<?>cls),第一个参数为提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。

startActivity( )方法则用于启动目标活动。

启动程序,按下按钮即可成功启动SecondActivity。

1.使用隐式content

并不明确指出想要启动哪一个活动,指定一系列更为抽象的action和category,交由系统去分析该Intent,并帮我们找出合适的活动去启动。

1.在<activity>标签下配置<intent-filter>,指定action和category

2.修改FirstActivity中按钮的点击事件

隐式调用成功。category为默认模式,不用设置。

3.category中增加

则要是想启动SecondActivity,需调用intent.addCategory( )方法

2.3.3更多隐式Intent用法

Eg:

1.应用程序内调用系统的浏览器打开网页

修改FirstActivity中按钮点击事件的代码

首先指定Intent的action是Intent.ACTION_VIEW,为系统内置操作。

通过Uri.parse()方法将i个网址字符串解析为一个Uri对象,再调用Intent的setData()方法将这个Uri对象传递进去。

可以在<intent-filter>标签中配置一个<data>标签,用于更精确地指定当前活动能够相应什么类型的数据,可以配置:

android:scheme 指定协议的部分,如http部分。

android:host 指定数据的主机名部分,如www.baidu.com部分。

android:port 指定数据的端口部分,一般紧随在主机名之后。

android:path 指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。

android:mimeType 指定可以处理的数据类型。

只有<data>标签中制定的内容和Intent中携带的Data完全一致时,当前活动才能够响应Intent。不过一般<data>标签中都不会指定太多内容。

  1. 系统拨号界面

2.3.4向下一个活动传递数据

用Intent在启动活动时传递数据。

Intent提供了一系列putExtra( )方法的重载,可以将想要传递的数据暂存在content中,启动了另一个活动后,只需要把这些数据再从Intent中取出即可。

Eg:

FirstActivity中有一个字符串传入SecondActivity

1.FirstActivity按钮中重写事件

PutExtra( )方法中第一个参数是键值名称,第二个参数才是真正的数据

2.SecondActivity中取出数据并打印

GetIntent( )方法获得用于启动SecondActivity的Intent,然后调用getStringExtra( )方法,传入相应键值即可。

传递字符串,用getStringExtra()方法来获取。

传递整型数据,用getIntExtra()方法来获取。

传递布尔型数据,用getBooleanExtra()方法来获取。

运行程序

2.3.5 返回数据给上一个活动

用Button 2 从SecondActivity向FirstActivity传递数据

1.修改FirstActivity中按钮的点击事件,startActivityForResult( )方法接受两个参数,第一个参数为intent,第二个参数为请求吗,用于在之后回调中判断数据来源。

2.SecondActivity中给按钮注册事件,并添加返回逻辑

setResult( )接收两个参数,第一个参数用于向上一个活动返回处理结果,一般用RESULT_OK或RESULT_CANCELED,第二个参数则是把带有数据的Intent传递回去,然后调用finish( )方法来销毁当前活动。

3.之前用startActivityForResult( )来启动SecondActivity的,在SecondActivity被销毁之后会回调到上一个活动的onActivityResult( )方法,在FirstActivity中重写该方法得到放回的数据。

OnActivityResult( )方法中有三个参数,第一个为requestCode,即为启动活动时传入的请求码。第二个参数为resultCode,即在返回数据时传入的处理结果。第三个参数data,即携带着返回数据的Intent。

运行程序,按Button 1—>Button 2

4.按back键返回传递数据,只需在SecondActivity中重写onBackPress()方法即可。

<Android基础>(二) Activity Part 1的更多相关文章

  1. <Android基础>(二) Activity Part 2

    1.活动生命周期 1)返回栈 2)活动状态 3)活动的生存期 2.活动的启动模式 1)standard 2)singleTop 3)singleTask 4)singleInstance 3.活动的优 ...

  2. android 基础02 - Activity 的生命周期及状态

    返回栈 Android 中的 Activity 是可以层叠的,当我们启动一个新的 Activity 时,就会覆盖在原有的 Activity 之上, 点击 Back 会销毁当前 Activity,下面的 ...

  3. Android 基础 二 四大组件 Activity

    Activity Intent IntentFilter 一理论概述 一. Activity 用来提供一个能让用户操作并与之交互的界面. 1.1 启动 startActivity(Intent int ...

  4. Android基础之Activity launchMode详解

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Activity的lauchmode,是基础的属性,但也是App优化必须掌握的知识,它约束了Acti ...

  5. Android基础之Activity

    一.什么是Activity Activity是Android四大组件之一,并且Activity是组件中的重中之重. Activity是为用户提供一个用于信息交互的窗口. 二.如何去创建Activity ...

  6. Android基础之Activity四种启动模式

    这东西是最基础的,发现自己其实没有真正试过,好好研究研究 standard :默认, singleTop :大体上同standard,但是当该Activity实例已经在task栈顶,不再创建新的实例, ...

  7. Android基础_3 Activity相对布局

    相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的.相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一 ...

  8. Android基础_2 Activity线性布局和表格布局

    在activity的布局中,线性布局和表格布局是最简单的,这次分别从线性布局,表格布局以及线性布局和表格混合布局做了实验,实验中只需要编写 相应的xml的代码,java代码不需要更改,因为我们这里只是 ...

  9. 【Android基础】Activity之间进行参数传递的三种方式

    1.使用Intent进行传输 //发送数据的Activity class button implements OnClickListener{ @Override public void onClic ...

随机推荐

  1. MySQL中关于数据类型指定宽度之后的情况

    概述 MySQL有很多种数据类型,最常用的就是int,char,varchar,这些类型在创建表的时候都可以指定该字段的宽度,方法是在类型后面加一个括号,括号中写宽度就可以了. 但是,在指定宽度之后, ...

  2. 【学习总结】GirlsInAI ML-diary day-16-pip install XX

    [学习总结]GirlsInAI ML-diary 总 原博github链接-day16 Pip pip是python 著名的包管理工具,在python开发过程必不可少. 本节带大家了解用pip实现的p ...

  3. ansible jenkins war

    Ansible is Simple IT Automationhttps://www.ansible.com/ Ansible中文权威指南- 国内最专业的Ansible中文官方学习手册http://a ...

  4. 【Python3练习题 012】 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    ASCII 码表的对应值,知道 ord('a') 能将字符 'a' 转化为 ASCII 码表上对应的数值,就可以了.其中,数字 0-9 对应的码值为 48-57,大写字母 A-Z 对应 65-90,小 ...

  5. Vue+iview实现添加删除类

    <style> .tab-warp{ border-bottom: solid 1px #e0e0e0; overflow: hidden; margin-top: 30px; posit ...

  6. Git-用 cherry-pick 挑好看的小樱桃

         版权声明:本文为博主原创文章,转载请在文章明显位置标明文章原属哦. https://blog.csdn.net/qq_32452623/article/details/79449534 ti ...

  7. day 7-15 表与表之间的关系

    一. 前言 表与 表之间有3种对应关系,分别是: 多对一:一张表中的一个字段中的多个值对应另外一张表中的一个字段值.(多个学生,可以学习同一门课程) 多对多;一张表中的一个字段值对应另外一张表中的多个 ...

  8. 五句话搞定JavaScript作用域(ES5)

    JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...

  9. Mybaits整合Spring

    整合思路 1.SqlSessionFactory对象应该放到spring容器中作为单例存在. 2.传统dao的开发方式中,应该从spring容器中获得sqlsession对象. 3.Mapper代理形 ...

  10. 对C#调用C++的dll的一点思考

    最近在对接C++程序的时候碰到了一些问题,然后花了一段时间才解决,今天就这些小问题来做一个总结,很多时候由于对另外一种开发语言的不熟悉,会在使用的过程中遇到很多的问题,这些问题看似简单但是背后却有很多 ...