如何在Android的Intent中将字符串转换为编辑框?

3

如何将字符串转换为EditText,我在一个活动中创建了一个EditText,然后创建了第二个活动,并通过意图从字符串中获取此EditText,然后如何将其分配给第二个活动的EditText,但是我不知道如何将字符串分配给EditText。在这里,我使用了一个go函数,当单击按钮时使用。

This is my first activity

class MainActivity : AppCompatActivity() , View.OnClickListener{ 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    fun go(v:View){
        val intent=Intent(this@MainActivity,Main2Activity::class.java)
        var aa=EditText1.text
        intent.putExtra("name",aa)
        startActivity(intent)
    }
}

This is my second activity

class Main2Activity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        var str=intent.getStringExtra("name").toString()
        et21.setText(str)
    }
}

当我运行这个程序时,我的应用程序崩溃了。 - hardik gosai
你在哪里初始化了 et21 - Murat Karagöz
这是我的主要活动
这是我的主要活动2 <EditText android:id="@+id/et21" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPersonName" /> - hardik gosai
3个回答

1
因为您试图将charSequence设置到您的EditText,所以在从FirstEditText获取值时,只需转换为String即可。在第二个活动中进行操作。
  class Main2Activity : AppCompatActivity() {
                override fun onCreate(savedInstanceState: Bundle?) {
                    super.onCreate(savedInstanceState)
                    setContentView(R.layout.activity_main2)
                    intent.getStringExtra("name")?.let {
                     et21.setText(it)
                    }
                }
            }

你的第一个活动内部。
fun go(v:View){
        val intent=Intent(this@MainActivity,Main2Activity::class.java)
        var aa=EditText1.text.toString()
        intent.putExtra("name",aa)
        startActivity(intent)
    }

已更新答案并运行,拿上面的代码告诉我。 - Sachin Rajput
仍然会导致应用程序不幸停止。 - hardik gosai
@Thunder 在 Kotlin 中,对于可空类型的 let 块的设计是这样的:如果可空类型有值,则在 let 块内部自动获取非空值,并可以使用 "it" 关键字访问。对我来说,在 let 块内再次调用 intent.getStringExtra("name") 没有意义。请参考 https://kotlinlang.org/docs/reference/idioms.html#map-nullable-value-if-not-null - JTeam
在你的第一个活动中添加 .toStringvar aa = EditText1.text.toString() - Sachin Rajput

1
在您的第一个活动中,将go函数更改如下:
 fun go(v:View){
        val intent=Intent(this@MainActivity,Main2Activity::class.java)
        var aa=EditText1.text.toString()
        intent.putExtra("name",aa)
        startActivity(intent)
    }

在您的第二个活动中,将onCreate的最后一行更改为以下内容,您需要从可空类型中解包该值。这可以使用let块在可空类型上完成。我还假设et21是对编辑文本的引用,并已正确初始化。 此解决方案是空安全的。
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)
    intent.getStringExtra("name")?.let {
        et21.setText(it)
    }
}

@Thunder兄弟,我已经进入了第二个活动,但是在et21的edittext中无法获取数据。 - hardik gosai
@hardikgosai 请检查已编辑的答案。您还需要更改go func。如果可以,请告诉我它是否有效。 - JTeam

0
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)
    val extras:Bundle =intent.extras
    val nn=extras.getString("name")
    eT21.setText("${nn}")
}

Or

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)
    eT21.setText(intent.getStringExtra("name"))
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接