35

当我正在学习 Kotlin 进行 Android 开发时,我现在正在尝试基本程序,例如 hello world 以及如何从一个活动导航到另一个活动,这没有问题。

当我从一个活动转移到另一个活动时,它工作正常,但我不知道如何在活动之间传递值。

我试图在一个活动中设置值并在另一个不起作用的活动中检索它们。

请看下面的代码片段

这是我的主要活动,我从编辑文本中获取用户名和密码并将其设置为意图:

class MainActivity : AppCompatActivity() {
    val userName = null
    val password = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            val intent = Intent(this@MainActivity,SecondActivity::class.java);
            var userName = username.textø
            var password = password_field.text
            intent.putExtra("Username", userName)
            intent.putExtra("Password", password)
            startActivity(intent);
        }
    }
}

这是我的第二个活动,我必须从主要活动中接收值

class SecondActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        var strUser: String = intent.getStringExtra("Username")
        var strPassword: String = intent.getStringExtra("Password")
        user_name.setText("Seelan")
        passwor_print.setText("Seelan")
    }
}

请指导我如何做到这一点,如果不是有意的话,我是否有其他方法可以在 Kotlin 中做到这一点。

4

7 回答 7

75

从 HomeActivity 发送值

val intent = Intent(this@HomeActivity,ProfileActivity::class.java)
intent.putExtra("Username","John Doe")
startActivity(intent)

在 ProfileActivity 中获取值

val profileName=intent.getStringExtra("Username")
于 2018-04-27T18:15:49.273 回答
11

我在手机上,你必须自己测试。

尝试把 aCharSequence变成Stringin MainActivity,你放的是 aCharSequence而不是 a String,例如:

var userName = username.text.toString()
var password = password_field.text.toString()
于 2017-07-18T05:04:20.727 回答
8

在 Kotlin 中,您可以简单地使用 Intent 传递数据。您可以直接将数据放入意图中,也可以将这些数据写入捆绑包并使用该意图将该捆绑包发送到另一个活动。

val intent = Intent(this@HomeActivity,ProfileActivity::class.java);
intent.putExtra("profileName", "John Doe")
var b = Bundle()
b.putBoolean("isActive", true)
intent.putExtras(b)
startActivity(intent);
于 2017-10-18T10:29:56.490 回答
3

您可以简单地使用意图和捆绑将数据从一个活动发送到另一个活动。

val intent = Intent(this@OneActivity,TwoActivity::class.java);
intent.putExtra("username", userName)
startActivity(intent);
于 2017-10-18T10:24:45.930 回答
2

首先你应该这样做,

var userName = username.text.toString()
var password = password_field.text.toString()

添加 Anko 依赖。

 implementation "org.jetbrains.anko:anko:0.10.4"

内部传递MainActivity()的信息就像

startActivity<SecondActivity>("Username" to userName,"Password" to password )

SecondActivity()从is获取信息,

val profileName=intent.getStringExtra("Username")
于 2018-05-09T13:24:52.607 回答
1
    //On Click on Button 

    var but = findViewById<Button>(R.id.buttionActivity_two) as Button

            but.setOnClickListener {
    //Define intent 
                var intent = Intent(applicationContext,MainActivity::class.java)
// Here "first" is key and 123 is value                
intent.putExtra("first",123)
                startActivity(intent)

            }

        }

// If Get In Into Other Activity
var Intent1: Intent
Intent1= getIntent()
//Here first is key and 0 is default value
      var obj :Int  =  Intent1.getIntExtra("first",0);
      Log.d("mytag","VAlue is==>"+obj)
于 2018-04-23T07:28:24.530 回答
1

您可以在不使用附加功能或意图的情况下访问该值。只需在 MainActivity 中使用伴随对象:

    companion object{
        val userName: String = String()
        val password: String = String()
    }

在第二活动中:

    var strUser: String = MainActivity.username
    var strPassword: String = MainActivity.password

您可以轻松访问多个活动的值。

于 2020-01-24T08:26:39.273 回答