显式intent

创建两个activity,FristActivity与SecondActivity。
从FristActivity点击按钮跳转到SecondActivity。

  binding.clickButC.setOnClickListener {

           val intent = Intent(this, SecondActivity::class.java)
            startActivity(intent)
  }

注意上面的::java用法。

隐式Intent

SecondActivity配置intent-filter

  <activity
            android:name=".SecondActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="com.bz.yh.xd.testkotlin.second" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

FristActivity通过action跳转SecondActivity


        binding.clickButC.setOnClickListener {
            val intent2 = Intent("com.bz.yh.xd.testkotlin.second")
            startActivity(intent2)
        }

使用intent跳转系统浏览器,并打开网页。

 binding.clickButC.setOnClickListener {

            val intent = Intent();
            intent.data = Uri.parse("http://www.csdn.net")
            startActivity(intent)
        }

使用intent跳转拨号界面。

   binding.clickButC.setOnClickListener {

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

activity间使用intent传递数据

FirstActivity

        binding.clickButC.setOnClickListener {

            val data = "8888888888"
            val intent = Intent(this, SecondActivity::class.java)
            intent.putExtra("mydata",data)
            startActivity(intent)
        }

SecondActivity接收参数

class SecondActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_second)

       val eData: String? =  intent.getStringExtra("mydata")
        if(eData!=null){

            Log.d("SecondActivity",eData)
        }
    }
}

intent实际上是调用getIntent()
在这里插入图片描述

返回数据给上一个activity

startActivityForResult()已过时

在FirstActivity中,创建一个ActivityResultLauncher实例,使用registerForActivityResult监听结果返回。

class ClickActivity : ComponentActivity() {

     lateinit var startForResult: ActivityResultLauncher<Intent>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()

        val binding = ActivityClickBinding.inflate(layoutInflater)
        setContentView(binding.root)


        startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            // 这里是回调函数,当第二个Activity返回时调用
            if (result.resultCode == RESULT_OK) {
                // 这里可以处理返回的数据
                val data: Intent? = result.data
                val returnedValue = data?.getStringExtra("mydata")
                // 使用返回的数据做些什么
                Toast.makeText(this, "返回的数据: $returnedValue", Toast.LENGTH_SHORT).show()
            }
        }

        binding.clickButC.setOnClickListener {

            val intent = Intent(this, SecondActivity::class.java)
            startForResult.launch(intent)
        }
    }
}

在SecondActivity中,设置返回数据

class SecondActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()


        val binding = ActivitySecondBinding.inflate(layoutInflater);
        setContentView(binding.root)

        binding.secondTvClick.setOnClickListener {
            val returnIntent = Intent()
            returnIntent.putExtra("mydata", "这是从SecondActivity返回的数据")
            setResult(RESULT_OK, returnIntent)
            finish()
        }
    }
}
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐