【问题标题】:How to open same Activity with different data in Android Kotlin?如何在 Android Kotlin 中打开具有不同数据的相同 Activity?
【发布时间】:2020-02-26 18:20:04
【问题描述】:
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)
        }
    }
}

大家好!我是使用 Kotlin 进行 Android 编程的新手。

我有两个活动,假设A和B。我想从A开始活动B,当B启动时,它将A的TextView字符串显示为TextView_Main

现在工作正常。我想再次启动活动 B,单击活动 B 上的 button_Run,并再次传递我在活动 B 的 edittext 中输入的字符串。现在它应该显示在活动 B 的 textview 上,当它打开时再次。

请帮我做。

【问题讨论】:

    标签: kotlin android-intent android-activity onactivityresult start-activity


    【解决方案1】:

    问题在于edittext 字符串被存储为一个名为MAINUSERKEY="MainActivity” 的intent extra,这与您当前在MainActivity 上提取的extra 不同,后者的名称为USER_KEY="FirstActivity”。所以我会做这样的事情来确保我得到正确的额外字符串:

    str = with(intent) {
         getStringExtra(FirstActivity.USER_KEY) ?: getStringExtra(MainActivity.MAINUSERKEY) ?: "No string extra was found"
    }
    

    【讨论】:

    • 感谢@JaviHerAr,它就像一个 switch (when) 语句,我希望它会起作用....
    • 我很高兴能帮上忙。澄清一下,with 函数不像 switch/when,它允许您在作为 lambda 内部参数传递的对象上执行某些代码,在本例中为 intent。你可以不使用with 函数来做到这一点,它会是这样的:str = intent.getStringExtra(FirstActivity.USER_KEY) ?: intent.getStringExtra(MainActivity.MAINUSERKEY) ?: "No string extra was found" Here 你有它的详细解释,以及你可以在 Kotlin 中使用的其他作用域函数。
    • 顺便问一下,您能否将我的答案标记为有效答案?谢谢! ?
    【解决方案2】:

    像下面的代码一样startActivity更清晰,在ActivityB中添加这段代码

       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
        }
    }
    

    以及 ActivityA 中的这段代码:

    startActivity(ActivityB.getIntent(this,"some key"))
    

    所以每次启动 activityB 时都应该传递字符串

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2022-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      相关资源
      最近更新 更多