活动

在活动中使用Toast

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

2.用法:通过静态方法makeText()创建一个Toast对象,然后调用show()将Toast显示出来就行啦。

注意:makeText()方法需要传入三个参数。第一个参数是Context,也就是Toast要求的上下文,由于活动本身就是Context对象,所以这里直接传入FirstActivity.this即可。第二个参数是Toast显示的内容。第三个是Toast显示的时长,有两个内置常量Toast.LENGTH_SHOUT和Toast.LENGTH_LONG。

示例:Toast.makeText(FristActivity.this, "You clicked Button 1", Toast.LENGTH_SHOUT).show();

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//Log.d("FirstActivity", this.toString());Log.d("FirstActivity", "Task id is" + getTaskId());setContentView(R.layout.first_layout);Button button1 = (Button) findViewById(R.id.button_1);button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Toast.makeText(FirstActivity.this, "You clicked Button 1", Toast.LENGTH_SHORT).show();//当你点击按钮会打印You...}});}
}

在活动中使用Menu

1.首先在res目录下新建一个menu文件夹,接着在这个文件夹下新建一个叫main的菜单文件,然后在main.xml中添加代码:

<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/add.item"android:title="Add"/><itemandroid:id="@+id/remove_item"android:title="Remove"/>
</menu>

其中< item >标签就是用来创建具体的一个菜单项,然后通过android:id给这个菜单项指定唯一的标识符,通过android:title给这个菜单项指定一个名称 。

然后在FirstActivity中重写onCreateoptionsMenu()方法:

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main,menu);return true;}

通过getMenuInflater()方法能够得到MenuInflater对象,再调用他的inflate()方法就可以给当前活动创建菜单了。

注意:inflate()方法接收两个参数,第一个参数用于指定我们通过那一个资源文件来创建菜单,第二个参数用于指定我们的菜单项将添加到哪一个Menu对象中,返回true表示允许创建的菜单显示出来,false则无法显示。

2.定义菜单响应事件

在FirstActivity中重写onOptionsItemSelected()方法:

@Overridepublic boolean onOptionsItemSelected(@NonNull MenuItem item) {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;}

通过调用item.getItemId()来判断我们点击的是哪一个菜单项,然后给每个菜单项加入逻辑处理,这里用的是Toast,弹出一个提示。


可以看到,菜单里的菜单项默认是不会显示的,只有点击一下菜单按钮才会弹出里面具体的内容,因此他不会占用任何活动的空间。

销毁一个活动

1.按一下Back键就可以销毁当前的活动了
2.Activity类中提供了一个finish()方法,在活动中调用一下这个方法就能销毁当前活动了

button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {//finish();//销毁本次活动}
});

使用Intent在活动之间穿梭

Intent是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据

使用显示Intent

要在活动之间穿梭就需要多个活动,创建SecondActivity活动,布局文件second_layout。

在布局文件中定义Button 2:

<Buttonandroid:id="@+id/button_2"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="Button 2"/>
  1. 构建出Intent的“意图”
    Intent有多个构造函数的重载,
    Intent(Context packageContext, class<?> cls),这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动。通过这个构造就可以构建出Intent的“意图”。
  2. 启动活动
    Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,就可以启动目标活动了。
button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);//第一个参数是上下文,二是目标活动,“意图”为在FirstActivity这个活动的基础上打开SecondActivity这个活动startActivity(intent);//启动活动}
});

使用这种方式来启动活动,Intent的“意图”非常明显,因此我们称之为显示Intent

使用隐式Intent

隐式Intent不同于显式Intent,他不明确指定我们想要启动的活动,而是指定一些抽象的action和category,然后交给系统去分析这个intent并帮我们决定启动哪个活动。

此时有两个活动FirstActivity和SecondActivity,在AndroidManifest.xml为SecondActivity添加action和category标签代码:

<activity android:name=".SecondActivity"android:launchMode="singleInstance"><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></activity>

只有当< action>和< category>中的内容同时能够匹配上intent中指定的action和category时,SecondActivity这个活动才能响应该intent

此时为intent设置< action>和< category>,FirstActivity中的按钮点击事件,代码:

button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent intent = new Intent("com.example.activitytest.ACTION_START");intent.addCategory("com.example.activitytest.MY_CATEGORY");startActivity(intent);}});

特别说明:每个Intent中只能指定一个action,但却能指定多个category

添加category的方法:
调用Intent中的addCategory()方法添加一个category。

不是说< action>和< category>同时匹配上才能响应吗?怎么没有指定category:android.intent.category.DEFAULT呢?因为它是一种默认的category,在调用startActivity()方法时会自动将这个category添加到intent中。

使用Intent向下一个活动传递数据

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

比如有两个活动FirstActivity和SecondActivity,现在想要将FirstActivity的一个字符串传递给SecondActivity。
首先在FirstActivity中使用显式Intent将SecondActivity启动,并通过putExtra()方法传递一个字符串。

button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {String data = "Hello SecondActivity";Intent intent = new     Intent(FirstActivity.this,SecondActivity.class);//显式Intent启动活动intent.putExtra("extra_data", data);将FirstActivity中的一个字符串传递给    SecondActivitystartActivity(intent);}
});

注意:putExtra接收两个参数,第一个参数是键,用于后面从Intent中取值,第二个参数是传递的数据

然后在SecondActivity中将数据取出

public class SecondActivity extends BaseActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.second_layout);Intent intent = getIntent();String data = intent.getStringExtra("extra_data");Log.d("SecondActivity",data);}
}

首先通过getIntent() 可以获取启动SecondActivity的intent,然后调用intent中的getStringExtra() 方法传入相应的键值以获取数据。因为这里传递的是字符串所以使用getStringExtra(),如果传递整型数据则使用getIntExtra(),布尔型则使用getBooleanExtra()。

返回数据到上一个活动

返回上一个活动只需要按一下back键即可,但是并没有一个用于启动活动的Intent来传递数据。Activity中还有一个startActivityForResult()方法是用于启动活动的,并且这个方法期望在活动销毁的时候返回一个结果给上一个活动。

startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源,请求码只要是唯一值就行。

在FirstActivity中启动活动SecondActivity,代码如下:

button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivityForResult(intent, 1);//请求码}
});

在SecondActivity中给按钮注册点击事件,并在点击事件中添加返回数据的逻辑,代码如下:

button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent();intent.putExtra("data_return","Hello FirstActivity");setResult(RESULT_OK, intent);finish();}});

此时的Intent没有指定“意图”,仅仅使用来传递数据的。
setResult() 方法是专门向上一个活动返回数据的,它接收两个参数,第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OKRESULT_CANCELED第二个参数则把带有数据的Intent传递回去,然后调用finish()方法销毁SecondActivity活动。

在SecondActivity活动被销毁之后会回调上一个活动的onActivityResult() 方法,因此我们需要在FirstActivity中重写 onActivityResult()方法来得到返回的数据,代码如下:

 @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode) {case 1:if (resultCode == RESULT_OK) {String returnedData = data.getStringExtra("data_return");Log.d("FirstActivity", returnedData);}break;default:}}

onActivityResult()方法带有三个参数,第一个参数是我们启动活动时传入的请求码第二个参数是我们在返回数据时传入的处理结果,第三个参数是携带数据的Intent。

注意:由于在一个活动中可能调用startActivityForResult()方法去开启很多不同的活动,每个活动返回的数据都会回调到onActivityResult()这个方法,因此我们首先检查requestCode 的值判断数据来源(请求码),然后通过resultCode判断处理结果是否成功(RESULT_OKRESULT_CANCELED),最后从data中取值并打印。

如果需要按下back从SecondActivity回到FirstActivity并返回数据,就必须在SecondActivity重写onBackPressed()方法,代码如下:

@Override
public void onBackPressed() {//按下back则会执行Intent  intent = new Intent();intent.putExtra("data_return","Hello FirstActivity");setResult(RESULT_OK, intent);finish();
}

启动活动的最佳写法

假设SecondActivity中需要用到两个字符串参数,在启动SecondActivity时必须传递过来,那么我们很容易在FirstActivity写出代码:

显式Intent:

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("param1","data1");
intent.putExtra("param2","data2");
startActivity(intent);

最佳:

public class SecondActivity extends BaseActivity {public static void actionStart(Context context, String data1, String data2) {Intent intent = new Intent(context,SecondActivity.class);intent.putExtra("param1","data1");intent.putExtra("param2","data2");context.startActivity(intent);//此时在活动SecondActivity,所以前面要加上FirstActivity的上下文}
}

FirstActivity中调用SecondActivity中的actionStart()方法开启SecondActivity活动

button1.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {SecondActivity.actionStart(FirstActivity.this, "data1", "data2");//类名.调用     }
});

活动(Activity)相关推荐

  1. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第四章:活动Activity

    第 4 章 活动Activity 本章介绍Android 4大组件之一Activity的基本概念和常见用法.主要包括如何正确地启动和停止活动页 面.如何在两个活动之间传递各类消息.如何在意图之外给活动 ...

  2. 活动Activity的常见使用

    一.在活动中使用Toast Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间. 沿用上一 ...

  3. 从0到1学android:四大组件—活动Activity

    点击上方"罗晓胜",马上关注,您的支持对我帮助很大 上期文章 从0到1学android:认识Android 逻辑题--特尔斐城的少女 /   前言   / 活动(Activity) ...

  4. 探究活动-Activity

    探究Android Activity 1.活动是什么 Activity是最容易吸引  用户 的东西 Activiy是一种包含 用户界面的组件 主要用于和用户进行交互         一个applica ...

  5. 活动Activity

    07 活动 活动(Activity) 是最容易吸引用户的地方 是一种可以包含用户界面的组件 作用 用于和用户进行交互 活动的基本用法 STEP 1 :创建新项目,选择Add noActivity ST ...

  6. 《第一行代码》学习笔记9-活动Activity(7)

    1.发现Android中的活动是可以层叠的,每启动一个新的活动,就会覆盖在原活动之上, 然后点击Back键会销毁最上面的活动,下面的一个活动就会重新显示出来. 2.Android是使用任务来管理活动的 ...

  7. Android中活动Activity方面的知识点

    1.创建activity 2.配置AndroidManifest.xml文件 <application.. <activity android:name=".NewActivit ...

  8. [Android系列—] 3. 启动另外的活动(Activity)

    前言 [Android系列-] 2. Android 项目目录结构与用户界面的创建 在上一篇中,在一个活动中(activity)中显示了一个输入框和一个按钮.这一篇讲接着上一篇继续介绍如何在点击 Se ...

  9. 活动(Activity)详解

    一:活动状态 每个活动在其生命周期中最多可能会有四种状态. 1. 运行状态 当一个活动位于返回栈的栈顶时,这时活动就处于运行状态.系统最不愿意回收的就是处于运行状态的活动,因为这会带来非常差的用户体验 ...

  10. 《第一行代码》学习笔记11-活动Activity(9)

    1.android:theme,是用于给当前活动指定主题的,Android系统内置很多主题可以选择,@android:style/Theme.Dialog则是 让DialogActivity使用对话框 ...

最新文章

  1. android 读取asset下的文件注意事项
  2. 【转载】浏览器事件循环机制(event loop)
  3. python画的图怎么保存_python通过PyGame绘制图像并保存为图片文件的代码
  4. altium designer怎么在原理图中批量修改元件封装
  5. centos7离线安装tengine所需依赖
  6. docker开启mysql的binlog日志
  7. 【Java】Springboot项目中Transactional的使用方式
  8. [Java] 蓝桥杯ADV-158 算法提高 新建Microsoft Word文档
  9. Ubuntu18.04安装OpenCV4.3.0和环境配置(支持编译CUDA并安装配置python-opencv)
  10. 只包含因子2 3 5的数 (思维和二分)
  11. 系统如何实现权限控制
  12. ActiveX控件原理及手动修改
  13. Android平台WIFI启动流程之二
  14. 相册照片直播小程序开发
  15. Python零基础入门基础教程(非常详细)版
  16. @Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)
  17. 计算机网络上传慢,电脑上传速度慢的正确处理方法
  18. 面向数据发布和分析的差分隐私保护 -- 张啸剑
  19. 【译】TcMalloc: Thread-Caching Malloc
  20. 什么是泊松分布?什么是泊松过程?

热门文章

  1. echarts地图城市散点图
  2. Python模拟登录实战(二)
  3. 于德翔:实现充电网、车联网和互联网的融合 【转载】
  4. SQLSERVER2005的10054错误在Windows Server 2003 SP1上的解决办法
  5. 密码学大作业总结博客
  6. Java API接口统一格式返回结果类
  7. mysql 中间件 租户管理_多租户的设计与实现 - 《Gaea - MySQL 中间件》 - 书栈网 · BookStack...
  8. 小鑫吃苹果 3105
  9. Adaptec 1200A 在Win7下驱动
  10. TP5.1 单入口多域名多模块设置