1.基本用法

1.创建活动

Generate LayoutFile 创建布局文件

Launcher Activity 自动注册为主活动

编写顺序

  1. 活动Activity
  2. 注册.xml
  3. 界面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:活动的更多相关文章

  1. Xamarin.Android活动的生命周期

    一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...

  2. SQL Saturday 北京将于7月25日举办线下活动,欢迎参加

          地点:北京微软(中国)有限公司[望京利星行],三层308室     报名地址:https://onedrive.live.com/redir?page=survey&resid=f ...

  3. Redis简单案例(三) 连续登陆活动的简单实现

    连续登陆活动,或许大家都不会陌生,简单理解就是用户连续登陆了多少天之后,系统就会送一些礼品给相应的用户.最常见的 莫过于游戏和商城这些.游戏就送游戏币之类的东西,商城就送一些礼券.正值国庆,应该也有不 ...

  4. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  5. 用rose画UML图(用例图,活动图)

    用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...

  6. 如何查看/统计当前AD域控制器的活动用户?

    最近公司想知道某台AD域控制器上当前连接了多少活动用户? 此前个人只知道以下不是非常完善且统计起来比较麻烦的方法: 方法1:查看共享会话数.(不完全准确) 方法2:查看当前的DNS记录.(这种方法统计 ...

  7. 初次启动app校验的活动图和分析

    初次启动活动图 version 1 version 2 version 3 根据上图的活动图分析,可能存在较严重的问题: 主线程中如果发现是sdcard的url,则可能进行重命名 FirstEnter ...

  8. C语言 活动安排问题之二

    有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? #include <stdio.h> #include <string ...

  9. C语言 活动安排问题

    有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? #include <stdio.h> #include <stdlib ...

随机推荐

  1. ElasticSearch在CentOS的安装

    ElasticSearch在CentOS的安装 一.tar包安装 单机安装 创建elastic用户,ElasticSearch不支持root用户运行 useradd elastic 上传文件到 /so ...

  2. 浏览器自动化的一些体会6 增强的webBrowser控件

    这里谈两点 1.支持代理服务器切换 一种方法是修改注册表,不是太好的做法,而且,只能改全局设置,不能改局部(比如只让当前的webBrowser控件使用代理,而其他应用不用代理) 另外一个较好的方法,示 ...

  3. Hadoop的源码编译

    目录 正文 1.准备阶段 使用root登录Centos,并且要求能够正常连接网络.配置清单如下: (1)hadoop-2.7.2-src.tar.gz (2)jdk-8u144-linux-x64.t ...

  4. Spring注解驱动开发04(给容器中注册组件的方式)

    给容器中注册组件的方式 1. 组件注解标注 + 包扫描(适用于自己写的类) //控制层组件 @Controller public class PersonController { } //业务逻辑层组 ...

  5. 启动tomcat出现闪退的原因

    出现闪退的可能有几点: 1.没有安装jdk或者配置jdk是否配置成功 2.找不到jdk安装的路径 3.tomcat环境配置失败 如果是第二点原因(确保第一第三点配置都正确无误)找不到jdk路径的话,可 ...

  6. Chrome扩展应用Postman地址(直接搜是搜不到的)

    https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop

  7. openstack nova 创建虚机流程

    1文件 nova.api.openstack.coumpute.servers1函数 def create(self, req, body):1调用 (instances, resv_id) = se ...

  8. Build PhantomJS from Source

    Getting the Code To obtain the code using Git from the official repository github.com/ariya/phantomj ...

  9. Ubuntu 磁盘满了处理方法。

    Ubuntu 磁盘满了处理方法: 1. 如果是虚拟机安装ubuntu,直接给虚拟机安装ubuntu 系统所在的盘符动态分配一点磁盘容量,就可以了. 2. 如果不是虚拟机安装ubuntu,那么有两个办法 ...

  10. NeoVIM安装使用

    1.What's Neovim Bram Moolenaar 在写 Vim 时还是 90 年代初,至今已经 20 多年 过去了.其中,不仅包含了大量的遗留代码,而且程序的维护.Bug 的 修复.以及新 ...