【问题标题】:Activity not passing intent to onActivityResult()活动未将意图传递给 onActivityResult()
【发布时间】:2020-03-07 03:56:34
【问题描述】:

这是 Kotlin 主要活动,它在从第二个活动接收数据时遇到问题(在此之后发布)


class MainActivity : AppCompatActivity() {



    private val LOG_TAG = MainActivity::class.java.simpleName


    val EXTRA_MESSAGE = "com.example.android.twoactivities.extra.MESSAGE"

    val TEXT_REQUEST = 1



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

    }


    fun launchSecondActivity(view: View) {
        Log.d(LOG_TAG, "Button clicked!")


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



        val message = "${editText_main.text}"



        intent.putExtra(EXTRA_MESSAGE, message)

        Toast.makeText(applicationContext, intent.getStringExtra(EXTRA_MESSAGE), Toast.LENGTH_LONG).show()


        startActivityForResult(intent, TEXT_REQUEST)

        editText_main.text.clear()

    }

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

        super.onActivityResult(requestCode, resultCode, data)

       if (requestCode == TEXT_REQUEST) {
            if (resultCode == RESULT_OK) {


                val reply = intent.getStringExtra(SecondActivity().EXTRA_REPLY)






                (findViewById<TextView>(R.id.text_header_reply) as TextView).setVisibility(View.VISIBLE)
                (findViewById(R.id.text_message_reply) as TextView).setText(reply)


            }
        }



    }
}

这是第二个活动,

class SecondActivity : AppCompatActivity() {

    val TEXT_REQUEST = 1

    val EXTRA_REPLY = "com.example.android.twoactivities.extra.REPLY"





    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)


        var message = intent.getStringExtra(MainActivity().EXTRA_MESSAGE)

        val textView2 = findViewById(R.id.text_message) as TextView


        if (textView2 != null) {
            textView2.setText(message)
        }

    }


    fun returnReply(view: View) {



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

        val reply = "${editText_second.text}"


        intent.putExtra(EXTRA_REPLY, reply)
        setResult(RESULT_OK,intent)

        Toast.makeText(applicationContext, intent.getStringExtra(EXTRA_REPLY), Toast.LENGTH_LONG).show()


        startActivityForResult(intent, TEXT_REQUEST)
        finish()


    }
}

代码有什么问题? TEXT_REQUEST 和 RESULT CODE 没有通过

【问题讨论】:

    标签: android-studio kotlin android-intent


    【解决方案1】:

    SecondActivity中删除此代码:

    startActivityForResult(intent, TEXT_REQUEST)
    

    MainActivity.onActivityResult() 中更改:

    val reply = intent.getStringExtra(SecondActivity().EXTRA_REPLY)
    

    到这里:

    val reply = data.getStringExtra(SecondActivity().EXTRA_REPLY)
    

    您正试图从错误的Intent 获取返回的“回复”。

    【讨论】:

    • 代码现在可以正常工作了。省略 startActivityForResult 的原因是什么?
    • MainActivity 通过调用startActivityForResult() 启动SecondActivity。这意味着当SecondActivity 完成时,“结果”将返回给MainActivity。这是自动发生的。您需要做的就是在SecondActivity 中设置您的“结果”,然后调用finish()。此时,SecondActivity 从任务堆栈中删除,Android 返回到MainActivity 并通过调用MainActivity.onActivityResult() 传递“结果”。我希望现在清楚了。
    • 另外,如果这个答案有帮助,您应该通过单击答案旁边的绿色复选标记“接受”它。这将从未回答的问题列表中删除该问题,并可能帮助遇到类似问题的其他人。
    【解决方案2】:

    从第二个活动中删除 startActivityForResult(intent, TEXT_REQUEST) 并检查您得到了什么结果?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 2021-07-16
      • 2020-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多