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. centos go 安装 使用

    #goland 确保能ping通百度[root@z my_project]# vi /etc/resolv.conf# Generated by NetworkManagersearch locald ...

  2. [netty4][netty-transport]netty之nio传输层

    [netty4][netty-transport]netty之nio传输层 nio基本处理逻辑 查看这里 Selector的处理 Selector实例构建 NioEventLoop.openSelec ...

  3. 【NOI2014】魔法森林 - 动态加边SPFA

    题目描述 为了得到书法大家的真传,小 E 同学下定决心去拜访住在魔法森林中的隐 士.魔法森林可以被看成一个包含 n 个节点 m 条边的无向图,节点标号为 1,2,3,…,n,边标号为 1,2,3,…, ...

  4. Mybatis分页插件: pageHelper的使用及其原理解析

    在实际工作中,很进行列表查询的场景,我们往往都需要做两个步骤:1. 查询所需页数对应数据:2. 统计符合条件的数据总数:而这,又会导致我们必然至少要写2个sql进行操作.这无形中增加了我们的工作量,另 ...

  5. 个人项目WordCount(C++/QT)

    个人项目WordCount(C++/QT) GitHub项目地址:https://github.com/Nova-cjp/Word-Count 百度云链接:https://pan.baidu.com/ ...

  6. Rainbow: Combining Improvements in Deep Reinforcement Learning

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! arXiv:1710.02298v1 [cs.AI] 6 Oct 2017 (AAAI 2018) Abstract 深度强化学习社区对D ...

  7. 服务器基本配置(ubuntu)

    服务器基本配置(ubuntu) 学习目标: 修改初始服务器名字(ubuntu 16.04 ) 修改初始服务器名字(ubuntu 18.04 ) ubuntu换源 更改默认python版本 安装软件出现 ...

  8. “DNAT+云链接+CDN”加速方案,助力出海企业落地生长

    摘要:“DNAT+云链接+CDN”加速方案,真正释放技术红利,真诚助力企业出海. 随着国内互联网行业的人口红利逐渐消失,本土互联网市场竞争不断加剧,加之国家多项“走出去”政策的推动,越来越多的中国互联 ...

  9. 解决SpringBoot jar包中的文件读取问题

    前言 SpringBoot微服务已成为业界主流,从开发到部署都非常省时省力,但是最近小明开发时遇到一个问题:在代码中读取资源文件(比如word文档.导出模版等),本地开发时可以正常读取 ,但是,当我们 ...

  10. CSS布局中浮动问题的四种解决方案

    一.起因: 子盒子设置浮动之后效果: 由此可见,蓝色的盒子设置浮动之后,因为脱离了标准文档流,它撑不起父盒子的高度,导致父盒子高度塌陷.如果网页中出现了这种问题,会导致我们整个网页的布局紊乱 二.解决 ...