Unit2:活动
1.基本用法
1.创建活动

Generate LayoutFile 创建布局文件
Launcher Activity 自动注册为主活动
编写顺序
- 活动Activity
- 注册.xml
- 界面res.xx
2.Toast使用
Activity中:
Button button1 = findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(FirstActivity.this,"you clicked Button 1", Toast.LENGTH_SHORT).show(); // 使用方法:Toast.makeText(上下文,文本,时长).show
}
});
res.Layout中:
<Button
android:id="@+id/button_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="Toast使用"
/>
3.Menu使用
Activity中:
/**
* 活动上添加menu菜单
* @param menu
* @return
*/
@Override
public boolean **onCreateOptionsMenu**(Menu menu) { // 重写该方法启动menu
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
/**
* 给menu菜单添加功能
* @param item
* @return
*/
@Override
public boolean **onOptionsItemSelected**(@NonNull MenuItem item) { // 将menu中的菜单栏配上事件
// 判断添加那个菜单项
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;
}
res.menu中:
<item
android:id="@+id/add_item"
android:title="Add"
></item>
<item
android:id="@+id/remove_item"
android:title="Remove"
></item>
2.活动穿梭
Intent显示传递
Activity中:
Button button3 = findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class); // 显示传送(开头,结尾)
startActivity(intent);
}
});
Intent隐示传递
Activity中:
Button button4 = findViewById(R.id.button_4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent("com.example.activitytest.ACTION_START"); // 隐式传送(结尾)
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
Intent intent = new Intent(Intent.ACTION_VIEW); // 跳转百度
intent.setData(Uri.parse("http://baidu.com"));
startActivity(intent);
Intent intent1 = new Intent(Intent.ACTION_DIAL); // 跳转拨号
intent1.setData(Uri.parse("tel:10086"));
startActivity(intent1);
}
});
.xml中配置:
<activity android:name=".SecondActivity" android:label="second page">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" /> // 自定义action,跳转时需要访问
<category android:name="android.intent.category.DEFAULT" /> // 默认category,跳转时不需要编写
<category android:name="com.example.activitytest.MY_CATEGORY" /> // 自定义category,跳转时需要访问
</intent-filter>
</activity>
信息的向上传递
第一个Activity中开启传送并接收:
Button button6 = findViewById(R.id.button_6);
button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, ThirdActivity.class);
startActivityForResult(intent, 1);
}
});
/**
* 接收上传数据
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
switch (requestCode) {
case 1:
if(resultCode == RESULT_OK) {
String ResultData = data.getStringExtra("data_result");
Log.d("FirstActivity", ResultData);
}
break;
default:
}
}
第二个Acticity中接收发送数据:
Button button = findViewById(R.id.button_t1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("data_result","hello,firstActivity");
setResult(RESULT_OK,intent);
finish();
}
});
@Override
public void **onBackPressed()** {
Intent intent = new Intent();
intent.putExtra("data_result","hello,back!");
setResult(RESULT_OK,intent);
finish();
}
信息的向下传递
第一个Activity中传送:
Button button5 = findViewById(R.id.button_5);
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data = "hello secondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
第二个Activity中接收:
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
Log.d("SecondActivity", data);
3.活动生命周期

4.活动启动
更改.xml文件中的属性
<activity
android:name=".MainActivity"
android:label="主页"
android:launchMode="standard"> //更改属性,修改启动项********
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
| 名称 | 作用 |
|---|---|
| 默认 | 每次启动都创建一个新的活动 |
| singleTop | 可以防止自启动创建新的,但是其他活动启动,任然创建新的活动 |
| singleTask | 检查是否存在该活动,已经存在直接用。不存在,创建新的活动 |
| singleInstance | 新创建一个返回栈使用该活动 |
5.活动实践
1.检测运行的活动
编写BaseActivity类继承AppCompatActivity,其他活动继承该类,启动时打印出运行的活动名称:
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName()); // 检测运行的活动名称
}
}
2.统一销毁活动
编写活动管理器
public class ActivityCollector {
public static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity) {
activities.add(activity);
}
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
public static void finishAll() {
for(Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
将活动管理器的初始化和销毁在BaseActivity中运行:
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityCollector.addActivity(this); // 将活动放入管理器
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this); //将活动在管理器中移除
}
}
之后就可以在继承了BaseActivity的活动中统一销毁所有的活动,退回界面了:
Button button1 = findViewById(R.id.buttonf1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ActivityCollector.finishAll(); // 退出活动
android.os.Process.killProcess(android.os.Process.myPid()); // 杀掉一个进程
}
});
3.最佳启动活动
对于需要参数访问的活动,最好建立一个actionStart()来时外界访问比较方便:
public static void actionStart(Context context,String data1,String data2) {
Intent intent = new Intent(context, 自己的名称.class);
intent.putExtra("data1",data1);
intent.putExtra("data2",data2);
context.startActivity(intent);
}
Unit2:活动的更多相关文章
- Xamarin.Android活动的生命周期
一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...
- SQL Saturday 北京将于7月25日举办线下活动,欢迎参加
地点:北京微软(中国)有限公司[望京利星行],三层308室 报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...
- Redis简单案例(三) 连续登陆活动的简单实现
连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送游戏币之类的东西,商城就送一些礼券.正值国庆,应该也有不 ...
- 51Nod 1428 活动安排问题
51Nod 1428 活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...
- 用rose画UML图(用例图,活动图)
用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...
- 如何查看/统计当前AD域控制器的活动用户?
最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...
- 初次启动app校验的活动图和分析
初次启动活动图 version 1 version 2 version 3 根据上图的活动图分析,可能存在较严重的问题: 主线程中如果发现是sdcard的url,则可能进行重命名 FirstEnter ...
- C语言 活动安排问题之二
有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? #include <stdio.h> #include <string ...
- C语言 活动安排问题
有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? #include <stdio.h> #include <stdlib ...
随机推荐
- mac 安卓生成证书(uniapp项目安卓证书申请)
mac 安卓生成证书 义务需求: 最近在开发基于uniapp框架的app,到了打包发布的阶段,来尝试打包为安卓的apk安装包.在用HBuild打包的时候需要提供安卓的数字证书(.keystore 文 ...
- Webpack开发指南
前言 成为一个全栈工程师,前端是必不可少的,这位前端构建工具webpack是一门必修的技术. 在学习webpack之前,先熟悉一下npm工具:https://www.runoob.com/nodejs ...
- 用C++写一个电话通讯录
目前我也是名初学C++的菜鸟,一直在B站上看的C++的网课,这个的C++电话通讯录是我写的第一个有一些功能的代码,所以在这里想分享给初学C++的小白们,如有任何问题或是建议可以在下方评论或是私信我,下 ...
- Jmeter 常用函数(29)- 详解 __eval
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 和 __V 的作用基本一致,执行变量名 ...
- 如何以正确的姿势安装Vue的依赖并且启动下载好的项目
首先,输入cd进入项目所在的目录. 然后输入 npm install --registry=https://registry.npm.taobao.org // --后面表示使用淘宝镜像,下 ...
- SLS案例中心
今日PV nginx日志查看今日的PV和昨日的对比,先通过count函数计算总的pv,再用compare函数得出今日的pv和昨日的同比. 通过单值图进行展示,显示值为20.381Mil,对比值为-2% ...
- Kubernetes入门(二)——Dashboard 安装
Kubernetes集群搭建完成后,可以通过命令行方式可以了解集群资源的使用情况,但是这种方式比较笨拙且不直观,因此考虑给集群安装Dashboard,这样能更直观了解集群状态.本文Dashboard的 ...
- 力扣Leetcode 572. 另一个树的子树
另一个树的子树 给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树.s 的一个子树包括 s 的一个节点和这个节点的所有子孙.s 也可以看做它自身的一棵子树. 示例 ...
- JS中强制类型转换
JavaScript提供了3种强制类型转换的方法 一.Boolean()方法 该方法将指定的参数转换成布尔型.Boolean(object).参数object可以是字符串对象.数值对象.DOM对象等. ...
- 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...