如何在Android Kotlin中使用不同的数据打开相同的活动?
大家好!我不熟悉Kotlin的Android编程 我有两个活动,假设A和B。我想从A启动活动B,当B启动时,它会将A的如何在Android Kotlin中使用不同的数据打开相同的活动?,kotlin,android-intent,android-activity,onactivityresult,start-activity,Kotlin,Android Intent,Android Activity,Onactivityresult,Start Activity,大家好!我不熟悉Kotlin的Android编程 我有两个活动,假设A和B。我想从A启动活动B,当B启动时,它会将A的TextView字符串显示到TextView\u Main 它现在运转良好。我想在单击活动B上的按钮\u Run并再次传递我在活动B的edittext中输入的字符串后再次启动活动B。现在,当它再次打开时,它应该显示在活动B的textview上 请帮助我执行此操作。问题是,edittext字符串被存储为名为MAINUSERKEY=“MainActivity”的意图额外值,这与您当前
TextView
字符串显示到TextView\u Main
它现在运转良好。我想在单击活动B上的按钮\u Run
并再次传递我在活动B的edittext
中输入的字符串后再次启动活动B。现在,当它再次打开时,它应该显示在活动B的textview
上
请帮助我执行此操作。问题是,
edittext
字符串被存储为名为MAINUSERKEY=“MainActivity”
的意图额外值,这与您当前在MainActivity
上提取的额外值不同,后者名为USER\u KEY=“FirstActivity”
。因此,我会这样做,以确保获得正确的额外字符串:
class FirstActivity : AppCompatActivity() {
companion object{
val USER_KEY="FirstActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_first)
button_firstActivity.setOnClickListener {
val string:String=textView_first.text.toString()
val intent=Intent(this,MainActivity::class.java)
intent.putExtra(USER_KEY,string)
startActivity(intent)
}
}
}
class MainActivity : AppCompatActivity() {
companion object{
val MAINUSERKEY="MainActivity"
var str:String=""
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
str=intent.getStringExtra(FirstActivity.USER_KEY)
textview_main.text=str
button_Run.setOnClickListener {
val edittextstring=editText1.text.toString()
val intent=Intent(this,MainActivity::class.java)
intent.putExtra(MAINUSERKEY,edittextstring)
startActivity(intent)
}
}
}
下面的代码更清楚地显示了startActivity,请在ActivityB中添加此代码
str = with(intent) {
getStringExtra(FirstActivity.USER_KEY) ?: getStringExtra(MainActivity.MAINUSERKEY) ?: "No string extra was found"
}
活动A中的代码:
companion object{
private const val EXTRA_ MAIN_USERKEY = "EXTRA.MAIN_USERKEY"
fun getIntent(context:Context, userKey:String): Intent
{
val intent = Intent(context,ActivityB::class.java)
intent.putExtra(EXTRA_ MAIN_USERKEY, userKey)
return intent
}
}
所以每次你开始活动b你都应该传递字符串谢谢@JaviHerAr这就像一个switch(when)语句,我希望它能起作用……我很高兴能提供帮助。只是澄清一下,
with
函数不像开关/when,它允许您在lambda中作为参数传递的对象上执行某些代码,在本例中为intent
。您可以不使用with
函数来执行此操作,如下所示:str=intent.getStringExtra(FirstActivity.USER\u KEY)?:intent.getStringExtra(MainActivity.MAINUSERKEY)?:“找不到额外的字符串”
您对它有详细的解释,以及可以在Kotlin中使用的其他作用域函数,你能把我的答案标为有效答案吗?谢谢
startActivity(ActivityB.getIntent(this,"some key"))