欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android实例:使用Intent在多个Activity之间传递数据

程序员文章站 2022-06-01 14:36:00
...

众所周知,intent可以用于启动Activity。其实在启动的时候,还能通过intent来传递数据,下面就来看一个实例。

向下一个Activity传递数据

第一个activity的布局文件
这里仅仅放置了一个按钮,用于启动第二个Activity。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动"/>

</LinearLayout>

第一个activity的代码文件
button的监听事件里启动Activity,并传递数据

package com.example.intenttest

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn.setOnClickListener{
            //使用显示Activity启动下一个Activity
            val intent = Intent(this, MainActivity2::class.java)
            //传递数据:一个键值对
            intent.putExtra("data", "这是传递的数据")
            startActivity(intent)
        }
    }
}

第二个Activity的代码文件
接收数据,并在Toast中显示出来。

package com.example.intenttest

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        //获得上一个Activity传来的数据
        val data = intent.getStringExtra("data")
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show()
    }
}

向上一个Activity传递数据

使用startActivityForResult启动第二个Activity。
在第二个Activity中使用setResult给前一个Activity传递数据。
当第二个Activity销毁时,就会自动调用第一个Activity的OnActivityResult()方法。因此我们需要重写此方法,处理返回的数据。

package com.example.intenttest

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btn.setOnClickListener{
            //使用显示Activity启动下一个Activity
            val intent = Intent(this, MainActivity2::class.java)
            //传递数据:一个键值对
            intent.putExtra("data", "这是传递的数据")

            //两个形参分别是intent和请求码(保证唯一即可)
            startActivityForResult(intent, 1)
        }
    }

    //重写此党发用于处理返回的数据
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when(requestCode){
            1 -> {
                val return_data = data?.getStringExtra("data_return")
                Toast.makeText(this, return_data, Toast.LENGTH_SHORT).show()
            }
        }
    }
}
package com.example.intenttest

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast

class MainActivity2 : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)

        //获得上一个Activity传来的数据
        val data = intent.getStringExtra("data")
        Toast.makeText(this, data, Toast.LENGTH_SHORT).show()
    }

    //
    override fun finish() {
        //使用没有参数的构造函数
        val intent1 = Intent()
        intent1.putExtra("data_return", "这是返回的数据")
        //专门用于处理返回的数据,接收两个参数。分别是请求码(一般传入RESULT_OK或者RESULT_CANCELED即可)
        setResult(Activity.RESULT_CANCELED, intent1)
        super.finish()
    }
}
相关标签: android android