如何在Android Kotlin中使用不同的数据打开相同的活动?

如何在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”的意图额外值,这与您当前

大家好!我不熟悉Kotlin的Android编程

我有两个活动,假设A和B。我想从A启动活动B,当B启动时,它会将A的
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"))