活动(Activity)
一、用Log打印日志
Log.d("HelloWorldActivity", "onCreate execute");
二、Toast用法
Toast.makeText(MainActivity.this, "You Clicked Button", Toast.LENGTH_SHORT).show();
三、在活动中使用Menu
首先在res目录下新建menu文件夹,接着在这个文件夹下新建一个名叫main的菜单文件,在main.xml中添加如下代码
<item
android:id="@+id/add_item"
android:title="Add" />
<item
android:id="@+id/remove_item"
android:title="Remove" />
回到Activity中重写onCreateOptionsMenu()方法,编写如下代码(返回true表示允许创建的菜单显示出来)
getMenuInflater().inflate(R.menu.main, menu);
return true;
还要定义菜单响应事件,在Activity中重写onOptionsItemSelected()方法,编写代码如下
switch (item.getItemId()){
case R.id.add_item:
Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast,makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
四、销毁一个活动
finish();
五、使用显示Intent
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(intent);
六、使用隐式Intent
通过在SecondActivity的<activity>标签下配置<intent-filter>的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
在FirstActivity中
Intent intent = new Intent("com.example.activitytest.ACTION_STAART");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
七、更多隐式Intent的用法
调用系统拨号界面
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);
八、向下一个活动传递数据
String data = "Hello SecondActivity"
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
在SecondActivity中将传递的数据取出,并打印出来
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
九、返回数据给上一个活动
startActivityForResult()方法(第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源)来启动SecondActivity
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, 1);
在SecondActivity中给按钮注册点击事件,并添加返回数据的逻辑(setResult()方法用于向上一个活动返回处理数据。第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或RESULT_CANCELED,第二个参数则把带有数据的Intent传递回去)
Intent intent = new Intent();
intent.putExtra("data_return", Hello FirstActivity);
setResult(RESULT_OK, intent);
finish();
由于是使用startActivityForResult()方法来启动SecondActivity的,在SecondActivity被销毁之后会回调上一个会动的onActivityResult()方法,因此需要在FirstActivity中重写这个方法来得到返回的数据
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode) {
case 1:
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("data_return");
Log.d("FirstActivity", returnData);
}
break;
default:
}
}
还可以通过Back键回到FirstActivity并得到返回数据(重写onBackPressed()方法)
public void onBackPressed(){
Intent intent = new Intent();
intent.putExtra("data_return", "Hello FirstActivity");
setResult(RESULT_OK, intent);
finish();
}
十、活动的启动模式
在实际项目中我们应该根据特定的需求为每个活动指定恰当的启动模式。启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式(返回栈中存在多少实例,就需要连按多少次Back键才嫩退出程序)
1、standard是活动默认的启动模式,对于使用standard模式的活动,系统不会在乎这个活动是否已经在返回栈中 存在,每次启动都会创建该活动的一个新的实例
2、当活动的启动模式指定为singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用它,不会再创建新的活动实例。不过当活动并未处于栈顶位置时,这时再启动该活动,还是会创建新的实例的
3、当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例
4、指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动
十一、随时随地退出程序
如果我们的程序需要一个注销或者退出的功能,那么就会用到如下方案,只需要用一个专门的集合类对所有的活动进行管理就可以了,代码如下
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity){
activities.add(activity);
}
public static void removeActivity(Actuvuty activity){
activities.remove(activity);
}
public static void finishAll(){
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
activities.clear();
}
}
接下来修改BaseActivity中的代码,在onCreate()方法中调用了ActivityCollector的addActivity()方法,表明将当前正在创建的活动添加到活动管理器里(ActivityCollector.addActivity(this);)。然后重写了onDestroy()方法,并调用了ActivityCollector的removeActivity()方法,表明将一个马上要销毁的活动从活动管理器里移除(ActivityCollector.removeActivity(this);)。之后不管在什么地方退出程序,只需要调用ActivityCollector.finishAll()方法就可以了
活动(Activity)的更多相关文章
- "浅谈Android"第二篇:活动(Activity)
距离上一篇文章,过去有半个多月了,在此期间忙于工作,疏于整理和总结,特此写下这篇博文,来谈谈自己对Activity的理解.总所周知,Activity组件在Android中的重要性不言而喻,我们 ...
- 安卓-活动Activity
Android有4大组件,活动 Activity,服务 Service ,广播接收器 Brostcast receiver,内容提供器 Content Provider 安卓活动的生命周期有7种, o ...
- Android活动(Activity)创建及生命周期
Activity是Android的门面,可以与用户进行互动的重要模块,凡是在应用中可以看到的东西,都是放在活动中的. 在学习新的技术时,我喜欢将需要学习的技术与自己懂得技术进行类似比较,而活 ...
- Android基础总结(2)——活动Activity
1.什么是活动(Activity) 活动(Activity)是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序中可以包含零个或多个活动,但不包含任何活动的应用程序很少见. 2.怎么使用 ...
- 《第一行代码》学习笔记9-活动Activity(7)
1.发现Android中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上, 然后点击Back键会销毁最上面的活动,下面的一个活动就会重新显示出来. 2.Android是使用任务来管理活动的 ...
- 《第一行代码》学习笔记6-活动Activity(4)
1.SecondActivity不是主活动,故不需要配置标签里的内容. 2.Intent是Android程序中各组件之间进行交互的一种重要方式,一般可被用于 启动活动,启动服务,以及发送广播等.Int ...
- 《第一行代码》学习笔记3-活动Activity(1)
1.活动-一种可以包含用户界面的组件,用于和用户进行交互. <Button android:id="@+id/button_1" android:layout_width=& ...
- Android之活动Activity用法
Activity是Android的四大组件之一,本篇将通过Activity的生命周期,Intent的组成部分以及如何使用Intent进行页面之间的消息传递来介绍它的基本用法. 1.activity的生 ...
- 活动 Activity 四种加载模式
singleTop要求如果创建intent的时候栈顶已经有要创建的Activity的实例,则将intent发送给该实例,而不发送给新的实例.(注意是栈顶,不在栈顶照样创建新实例!) singleTas ...
- 《第一行代码》学习笔记11-活动Activity(9)
1.android:theme,是用于给当前活动指定主题的,Android系统内置很多主题可以选择,@android:style/Theme.Dialog则是 让DialogActivity使用对话框 ...
随机推荐
- Qt软件打包发布(QT5.4.1(msvc2013_64_opengl),Win7 64bit)
环境:QT5.4.1(msvc2013_64_opengl),Win7 64bit 编译方式 Qt开发的程序发布的时候经常采用两种方式:1)静态编译,可生成单一的可执行文件:2)动态编译,需同时附上需 ...
- 简单的搭mysql开发环境
所需软件 环境win8 64bit mysql5.7.16winx64.zip mysql-workbench-community-6.3.5-win32.zip 安装完了之后到mysql/bin下 ...
- 10 The Go Programming Language Specification go语言规范 重点
The Go Programming Language Specification go语言规范 Version of May 9, 2018 Introduction 介绍 Notation 符号 ...
- MongoDB安全:创建第1个、第2个、第3个用户
Windows 10家庭中文版,MongoDB3.6.3, 前言 使用mongod命令基于某个空白文件夹(存放数据)启动MongoDB服务器时,要是没有使用--auth选项,启动后,任何客户端是可以无 ...
- python网络编程-socket上传下载文件(包括md5验证,大数据发送,粘包处理)
ftp server 1) 读取文件名 2)检查文件是否存在 3)打开文件 4)检查文件大小 5)发送文件大小给客户端 6)等客户端确认 7)开始边读边(md5计算)发数据 8)给客户端发md5 ft ...
- dragstart drag dragend dragenter dragover dragleave drop
dragstart drag dragend dragenter dragover dragleave drop 前端框架层出不穷,网页上的效果越来越绚丽,制作绚丽的效果的成本越来越低,其中有种拖 ...
- webpack3学习笔记
地址:https://segmentfault.com/a/1190000006843916 地址:https://www.chungold.com/my/course/32 地址:http://js ...
- bootstrap-fileinput上传文件的插件使用总结----编辑已成功上传过的图片
http://plugins.krajee.com/file-plugin-methods-demo 具体操作 http://plugins.krajee.com/file-preview-manag ...
- Python 安装requests模块
window下安装: 注:不要使用 easy_install requests 命令 这种方式安装后不能卸载,建议使用pip 方法 1.自动安装 输入cmd命令进入命令行窗口,执行 pip insta ...
- JAVA复习笔记分布式篇:zookeeper
前言:终于到分布式篇,前面把JAVA的一些核心知识复习了一遍,也是一个JAVA程序员最基本要掌握的知识点,接下来分布式的知识点算是互联网行业的JAVA程序员必备的技能: 概念:ZooK ...