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

问题描述 投票:0回答:2
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开始时,它将在TextView中显示A的TextView_Main字符串。

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

请帮助我做到这一点。

kotlin android-intent android-activity onactivityresult start-activity
2个回答
0
投票

问题是edittext字符串被存储为名称为MAINUSERKEY="MainActivity”的意图附加内容,这与您当前在MainActivity上提取的名称为USER_KEY="FirstActivity”的附加内容不同。所以我会做这样的事情,以确保额外获得正确的字符串:

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

0
投票

更清楚地将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时,您都应该传递字符串

© www.soinside.com 2019 - 2024. All rights reserved.