【问题标题】:How to pass the values from activity to another activity如何将值从活动传递到另一个活动
【发布时间】:2017-07-18 04:34:12
【问题描述】:

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

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

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

请看下面的代码sn-p

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

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 中做到这一点。

【问题讨论】:

    标签: kotlin kotlin-android-extensions


    【解决方案1】:

    从 HomeActivity 发送值

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

    在 ProfileActivity 中获取值

    val profileName=intent.getStringExtra("Username")
    

    【讨论】:

    • 逻辑问题:如果我们在 Activity #1 中创建 intent,我们如何在不声明 Activity #2 的情况下访问它?
    • 此活动#2 意图是 getIntent(),它是 kotlin 中的意图(getIntent)
    • 我不是超级开发者。对于Android,但我已经粘贴了你的代码行,它不起作用)
    【解决方案2】:

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

    尝试在MainActivity 中将CharSequence 设置为String,您已放入CharSequence 而不是String,例如:

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

    【讨论】:

    • @Jeyaseelan 一点也不。
    【解决方案3】:

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

    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);
    

    【讨论】:

      【解决方案4】:

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

      val intent = Intent(this@OneActivity,TwoActivity::class.java);
      intent.putExtra("username", userName)
      startActivity(intent);
      

      【讨论】:

        【解决方案5】:

        首先你应该这样做,

        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()获取信息是,

        val profileName=intent.getStringExtra("Username")
        

        【讨论】:

          【解决方案6】:
              //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)
          

          【讨论】:

            【解决方案7】:

            您可以直接访问该值,而无需使用附加功能或意图。只需在 MainActivity 中使用伴随对象:

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

            在 SecondActivity 中:

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

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

            【讨论】:

            • Kotlin: 未解析的参考:companion
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-08-17
            • 2011-10-27
            • 2012-08-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多