Почему отправка данных между действиями не работает? - PullRequest
0 голосов
/ 15 февраля 2020

Я сейчас использую Kotlin. Я пытаюсь изменить цвет поля в основной деятельности, перейдя к другой деятельности, которая является настройкой цвета. Мой код не возвращает ошибок, но не работает. Я попытался прочитать другой результат на этой странице, но никто не отвечал на мой вопрос. Спасибо за вашу помощь.

mainactivity.kt

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val button_box = findViewById<Button>(R.id.button_box)

        button_box.setOnClickListener {
            val intent = Intent(this, boxColor::class.java)
            startActivity(intent)
        }

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

            if (resultCode == RESULT_OK) {

                val returnColor = data!!.getStringExtra("colorName")

                val boxColorChoice = when (returnColor) {
                    "green" -> R.drawable.box_green
                    "grey" -> R.drawable.box_grey
                    "lblue" -> R.drawable.box_lblue
                    "purple" -> R.drawable.box_purple
                    "red" -> R.drawable.box_red
                    "white" -> R.drawable.box_white
                    "yellow" -> R.drawable.box_yellow
                    else -> R.drawable.box_white
                }
                button_box.setBackgroundResource(boxColorChoice)
            }
        }

здесь boxcolor.kt

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_box_color)

        val green = findViewById<Button>(R.id.green_box)
        val red = findViewById<Button>(R.id.red_box)
        val white = findViewById<Button>(R.id.white_box)
        val yellow = findViewById<Button>(R.id.yellow_box)
        val grey = findViewById<Button>(R.id.grey_box)
        val lblue = findViewById<Button>(R.id.lblue_box)

        green.setOnClickListener {
            val intent = Intent()
            intent.putExtra("colorName", "green")
            setResult(Activity.RESULT_OK, intent)
            finish()
        }

     (and the same onclicklistener for all the other colours)

также я знаю, что это небольшая проблема, но большое спасибо за помощь. Мне 14 лет, мальчик из Раджастхана, и я хочу стать программистом и учусь

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

вам нужно использовать startActivityForResult, ваш код должен измениться на:

mainactivity.kt

...
val mRequestCode = 101  //ADD THIS LINE
...
button_box.setOnClickListener {
            val intent = Intent(this, boxColor::class.java)
            startActivityForResult(intent, mRequestCode) //ADD THIS LINE
        }
...
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

            if (resultCode == mRequestCode) { //CHANGE THIS LINE
                ...
            }
        }

и в вашем boxcolor.kt:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_box_color)
        val mRequestCode = 101  //ADD THIS LINE

        ...

        green.setOnClickListener {
            val intent = Intent()
            intent.putExtra("colorName", "green")
            setResult(mRequestCode, intent)  //CHANGE THIS LINE
            finish()
        }

     (and the same onclicklistener for all the other colours)

Обратите внимание, что не используйте Activity.RESULT_OK в качестве кода запроса

0 голосов
/ 15 февраля 2020

Пожалуйста, используйте Код запроса и startActivityForResult

Пример:

private val R C = 101

val intent = Intent (this, boxColor :: class. java)

startActivityForResult (намерение, R C)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...