Activity(活动)之Intent(意图)(显式与隐式)的使用

您所在的位置:网站首页 显式方法和隐式方法 Activity(活动)之Intent(意图)(显式与隐式)的使用

Activity(活动)之Intent(意图)(显式与隐式)的使用

2024-07-12 00:58| 来源: 网络整理| 查看: 265

Intent(意图)是Android中各个组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可以用于启动活动、启动服务以及发送广播,发送通知等场景,Intent大致可以分为两种:显式Intent和隐式Intent,下面我们先看一下显式Intent如何使用。

Intent有多个构造函数的重载,其中一个是Intent(Context packageContext,Class cls)。这个构造函数接受两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的“意图”。然后我们应该怎么使用这个Intent呢?Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,他接受一个Intent参数,这里我们将构建好的Intent传入startActivity()方法中就可以启动目标活动了。

具体实现:

首先在res/layout/ activity_main.xml文件中添加两个Button控件

其次再MainActivity.java中声名控件,初始化控件,为控件设置点击监听事件,通过switch  case语句来判断点击的是哪个button按钮,具体是通过判断布局文件中设置好的Button id来监听的。

public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn1, btn2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btn1 = (Button) findViewById(R.id.btn1); btn2 = (Button) findViewById(R.id.btn2); btn1.setOnClickListener(this); btn2.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: //这里用来写点击btn1按钮之后需要进行的具体操作 break; case R.id.btn2: //这里用来写点击btn2按钮之后需要进行的具体操作 break; default: break; } } }

这里为了实现Activity之间的切换,我们需要再创建一个SecondActivity.java,并为其绑定一个activity_second.xml文件,这里我们就使用AS自动一键创建Activity的功能。具体步骤请看下图

Finish.之后等待一会,你的第二个Activity就创建好了。

接下来打开activity_second.xml文件,修改一下代码

 

显式Intent:

这个时候我们只需要在MainActivity.java中,btn1的点击监听事件中加2行代码就可以实现Activity之间的跳转了,代码如下。

@Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: //这里用来写点击btn1按钮之后需要进行的具体操作 Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); break; case R.id.btn2: //这里用来写点击btn2按钮之后需要进行的具体操作 break; default: break; } }

这个时候我们就可以运行一个我们的程序了,看一看是什么效果,点击显示Intent按钮,会跳转到SecondActivity,注意此时点击隐式Intent是没反应的,因为我们并没有写,隐式Intent点击监听后的处理。

以上就是显式Intent的具体用法,代码其实就1行。

调用startActivity()方法,参数传入Intent实例就行了。

startActivity(new Intent(MainActivity.this,SecondActivity.class));

 

 

隐式Intent:

相比于显示Intent,隐式Intent则含蓄了许多,他并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的action和category等信息,然后交由系统去分析这个Intent,并帮我们找出合适的活动去启动。那么什么叫做合适的活动去启动呢?简单来说就是可以响应我们这个隐式Intent的活动,那么目前SecondActivity可以响应什么样的隐式Intent呢?额,现在好像还什么都响应不了,不过很快就会有了。通过在标签下配置的内容,可以指定当前活动能够响应的action和category,打开AndroidManifest.xml,添加如下代码:

在标签中我们指明了当前活动可以响应com.example.activitytest.ACTION_START这个action,而标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的Intent中还可能带有的category。只有和中的内容能够匹配上Intent中指定的action和category时,这个活动才能响应该Intent。

在MainActivity.java中,btn2的点击监听事件中加2行代码就可以实现Activity之间的隐式Intent跳转了,代码如下。

@Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: //这里用来写点击btn1按钮之后需要进行的具体操作 Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivity(intent); break; case R.id.btn2: //这里用来写点击btn2按钮之后需要进行的具体操作 Intent intent1=new Intent("com.example.activitytest.ACTION_START"); startActivity(intent1); break; default: break; } } Intent intent1=new Intent("com.example.activitytest.ACTION_START"); startActivity(intent1);

可以看到我们使用了Intent的另一个构造函数,直接将action的字符串传了进去,表明我们想要启动能够响应com.example.activitytest.ACTION_START这个action的活动。那前面不是说要和同时匹配上才能响应的吗?怎么没看到哪里有指定category呢?因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。

重新运行一下程序,点击隐式Intent的按钮,我们发现界面跳转到了SecondActivity界面,效果如下:

不过此次我们使用的是默认的category,如果我们希望使用自定义的category,可以使用Intent类中的addCategory方法

来主动添加category,与此同时Manifest中也要添加一行标签,

代码如下

Intent intent1=new Intent("com.example.activitytest.ACTION_START"); intent1.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent1);

再运行一次程序,同样点击隐式Intent,效果一样。

显式Intent与隐式Intent的基本使用方法就是这么的简单,是不是很easy呢,后面我还会总结一下Intent的其它使用方式。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3