人生苦短,kotlin未尝不可~

实现目标

点击FirstActivity(主Activity)的一个Button跳转到SecondActivity

实现效果

方法1:使用显式Intent

首先,我们要为FirstActivity创建一个按钮。
编辑其布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".FirstActivity">        <Button        android:id="@+id/myButton"         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="@string/button"        tools:layout_editor_absoluteX="0dp"        tools:layout_editor_absoluteY="341dp" />androidx.constraintlayout.widget.ConstraintLayout>

然后为刚创建的按钮添加监听。
编辑FirstActivity.kt

class FirstActivity : AppCompatActivity() {         override fun onCreate(savedInstanceState: Bundle?) {             super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        //为myButton按钮创建监听        myButton.setOnClickListener{                 //从当前Activity跳转到SecondActivity            val intent = Intent(this,SecondActivity::class.java)            //startActivity()方法专门用于启动Activity            //他接受一个Intent参数            startActivity(intent)        }    }}

上述SecondActivity与FirstActivity处于同一个包下

代码说明

  • Intent
    • 是Android程序中各组件之间进行交互的一种重要方式。
      可用于启动Activity、启动Service以及发送广播等场景
    • 上述所用的一个构造函数:Intent(Context packageContext, Class<?> cls)
      • 第一个参数Context要求提供一个Activity的上下文
      • 第二个参数Class用于指定想要启动的目标Activity
  • startActivity()方法 : 接收一个Intent参数,从而启动目标Activity

方法2:使用隐式Intent

  • 使用Intent的另一个构造函数:直接将Activityaction传入

AndroidMainifest.xml中修改SecondActivity的标签属性

<activity android:name=".SecondActivity" android:label="Second_Activity">    <intent-filter>                <action android:name="com.example.myapplication.ACTION_START"/>        <category android:name="android.intent.category.DEFAULT"/>        <category android:name="android.intent.category.MYCAT"/>    intent-filter>activity>

只有actioncategory标签中的内容同时匹配Intent中的指定actioncategory时,这个Activity才能响应该Intent

再修改FirstActivity中按钮的点击事件

class FirstActivity : AppCompatActivity() {         override fun onCreate(savedInstanceState: Bundle?) {             super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        //添加点击监听        myButton.setOnClickListener{                 //将action的内容传入Intent            val intent = Intent("com.example.myapplication.ACTION_START")            //指定category(也可指定多个)            intent.addCategory("android.intent.category.MYCAT")            //启动能同时匹配上述action和category的Activity            startActivity(intent)        }    }}

每个Intent中只能有一个action,但能指定多个category
如果不指定category,则startActivity()方法会自动将android.intent.category.DEFAULT添加到Intent中

跳转到其他程序的Activity

以跳转到浏览器为例

只需要修改FirstActivity中按钮点击事件的代码:

button.setOnClickListener{         //首先指定intent的action是Intent.ACTION_VIEW    val intent = Intent(Intent.ACTION_VIEW)    //然后通过Uri.parse方法将字符串解析为Uri对象,并传递到Intent的data中    intent.data = Uri.parse("https://www.baidu.com")//实际上调用了Intent的setData()方法    startActivity(intent)}

这样的话就可以实现点击按钮后自动跳转到浏览器并显示百度官网了。

Intent.ACTION_VIEW的常量值为android.intent.action.VIEW

同时,我们还可以在标签中再配置一个标签,用于更精确的指定当前Activity能够响应的数据。标签中主要可以配置以下内容:

内容 作用
android:scheme 用于指定数据的协议部分,如上述https
android:host 指定数据的主机名部分,如www.baidu.com
android:port 用于指定端口部分
android:path 用于指定端口后面的部分
android:mimeType 指定可以处理的数据类型

比如让SecondActivity能够精准响应https的数据
只需要修改其布局文件second_layout.xml

<activity    android:name=".SecondActivity"    android:label="Second_Activity">    <intent-filter tools:ignore="AppLinkUrlError">                <action android:name="android.intent.action.VIEW"/>        <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="https"/>    intent-filter>activity>

只有actiondata内容都匹配才能实现跳转。
这里如果将android:scheme="https"改为android:scheme="http",那么将无法响应。

除了https协议外,我们还可以指定其他的协议,比如geo表示显示地理位置、tel表示拨打电话。
下面的代码展示了如何在程序中调用系统拨号界面:

button.setOnClickListener{         val intent = Intent(Intent.ACTION_DIAL)    intent.data = Uri.parse("tel:10086")    startActivity(intent)}

更多相关文章

  1. Android实现简单的分页效果
  2. 丧心病狂的Android混淆文件生成器
  3. Android实现退出界面弹出提示对话框
  4. android WebView拦截请求详解
  5. android仿微信实现欢迎界面、介绍界面及单击按钮跳转到主界面
  6. 关于android eclipse 打包出现android-sdk-windows\tools\supp
  7. Android控件之ToggleButton(多状态按钮)
  8. Android(安卓)Studio下Intent隐式启动,发短信,拨号,打电话,访问网页
  9. GitHub上几种Android表格控件

随机推荐

  1. 摩托罗拉推Android集成开发环境 加速应用
  2. ubuntu 10.04 64bit android 编译环境搭
  3. JS判断当前环境为微信,手机判断浏览器类型
  4. Android与服务器传递数据
  5. android edittext 输入手机号码格式变化
  6. android 用代码编写linearlayout布局
  7. android猜数字游戏
  8. Android(安卓)IntentService源码分析
  9. 自定义按钮实现android 返回按钮 事件
  10. Android 添加桌面快捷方式操作