我想将用户输入位置从一个屏幕使用到另一个屏幕,但我无法弄清楚这个意图部分

I want to use the user input locations from one screen to another, but I cannot figure out this intent part

提问人:Bhushan Savaratkar 提问时间:11/10/2023 更新时间:11/12/2023 访问量:21

问:

我正在制作一个类似于谷歌街景的虚拟导航应用程序。我通过微调器获取用户的当前位置和目的地,然后将这些输入转换为字符串。但是现在我想在我的 NavigationDispalyActivity.kt 中使用这些输入,但我无法弄清楚如何正确使用意图。

我的代码

MainActivity.kt (英语)

package com.example.collegeroamer

import android.content.Intent
import android.os.Bundle
import android.widget.ImageButton
import android.widget.Spinner
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    private lateinit var navigateButton: ImageButton
    private lateinit var currentLocationSpinner: Spinner
    private lateinit var destinationSpinner: Spinner
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navigateButton = findViewById(R.id.navigateButton)
        currentLocationSpinner = findViewById(R.id.currentLocationSpinner)
        destinationSpinner = findViewById(R.id.destinationSpinner)

        navigateButton.setOnClickListener {
            val startingLocation = currentLocationSpinner.selectedItem.toString()

            val destination = destinationSpinner.selectedItem.toString()

            val intent = Intent(this, NavigationDisplayActivity::class.java)
            intent.putExtra("selected_location", startingLocation)
            startActivity(intent)
        }
    }
}

导航显示活动.kt

@file:Suppress("UNUSED_EXPRESSION")

package com.example.collegeroamer

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

class NavigationDisplayActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_image_display)
        val locationImage = findViewById<ImageView>(R.id.locationImage)

        val selectedLocation = intent.getStringExtra("selected_location")
        
        val imageResourceId = getImageResourceIdForLocation(selectedLocation ?: "")
        locationImage.setImageResource(imageResourceId)
    }

    private fun getImageResourceIdForLocation(location: String): Int {
        return when (location) {
            else -> R.drawable.default_image
        }
    }
}
Kotlin Android-intent

评论

1赞 Bilal Naeem 11/10/2023
似乎有什么问题?据我所知,您正确地使用了意图。你有没有想实现的具体目标?
0赞 Bhushan Savaratkar 11/10/2023
我想获取两个输入并将它们传递到另一个屏幕,我很困惑

答:

0赞 Bilal Naeem 11/12/2023 #1

您可以在一个 Intent 中传递多个键值对。每个密钥必须是唯一的,否则它将覆盖之前使用该密钥设置的任何内容。有关 Intent 的更多信息,您可以阅读此处的开发者文档

您可以执行以下操作

//MainActivity
navigateButton.setOnClickListener {
    val startingLocation = currentLocationSpinner.selectedItem.toString()
    val destination = destinationSpinner.selectedItem.toString()

    val intent = Intent(this, NavigationDisplayActivity::class.java)
    intent.putExtra("selected_location", startingLocation)
    intent.putExtra("destination", destination) //<--- This is the new change
    startActivity(intent)
}

//NavigationDisplayActivity
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_image_display)
    val locationImage = findViewById<ImageView>(R.id.locationImage)

    val selectedLocation = intent.getStringExtra("selected_location")
    val imageResourceId = getImageResourceIdForLocation(selectedLocation ?: "")
    locationImage.setImageResource(imageResourceId)

    val destinationLocation = intent.getStringExtra("destination) //<-- Here we can fetch the value
}