android - Activity 结果API返回的数据为空

标签 android kotlin

我通过尝试从子 Activity 中返回可打包的数据式类来尝试新的Activity Results API。使用库的Alpha4。

根据我对文档的理解,我已经使用自定义契约(Contract)“AddAttendeeContract”设置了Intent。它会编译并运行,据我所知,正在调用正确的方法,但数据仅为null。

我可能会缺少什么?

class MainActivity : AppCompatActivity() {
    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        ... //boilerplate setup nonsense
        fab.setOnClickListener {
            addAttendee()
        }
    }

    private val addAttendee = registerForActivityResult(AddAttendeeContract()) { attendee: AttendeeData? ->
        println("Attendee") // this does not print out
        println(attendee)   // this does not either
    }
}

和契约(Contract)
class AddAttendeeContract : ActivityResultContract<Void?, AttendeeData?>() {
    override fun createIntent(
        context: Context,
        input: Void?
    ): Intent =
        Intent(context, AddAttendeeActivity::class.java)

    override fun parseResult(
        resultCode: Int,
        intent: Intent?
    ): AttendeeData? = when {
        resultCode != Activity.RESULT_OK -> null
        else -> intent?.getParcelableExtra<AttendeeData>("attendee")
    }
}

最后是子 Activity 类中的调用。
class AddAttendeeActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        ... //boilerplate

        add.setOnClickListener { //button on a form
            val name: String = view.name.text.toString().trim()
            val rate: Double = view.rate.text.toString().trim().toDouble()
            val number: Int = view.number.text.toString().trim().toInt()

            val intent = Intent(this, MainActivity::class.java).apply {
                putExtra("attendee", AttendeeData(name=name, rate=rate, number=number))
            }

            setResult(Activity.RESULT_OK, intent)
            startActivity(intent)
        }
    }
}

关于发生了什么的任何见解?

最佳答案

解决了。问题在于,第二项 Activity 是一种新的意图,而不是结束并回到原来的意图。

在第二个/子 Activity 中必须更改以下行:
startActivity(intent)finish()和一切都按预期工作。

关于android - Activity 结果API返回的数据为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61820347/

相关文章:

java - 实现多个接口(interface)的类的替代方案?

php - 一个奇怪的错误解析数据 org.json.JSONException : End of input at character 0 of

java - Android/Java : Html scraping, 正则表达式 Spotify 专辑封面

android - 是否可以在 Android 中使用 URL 而不是 SDK 将图像上传到 firebase 存储?

android - GSON 在从共享 prefs 获取时将之前存储的 List 转换为 LinkedTreeMaps 的 ArrayList

android - 检查文件是否在android中存在

kotlin - @InlineOnly 注释是什么?

android - 如何在 Xamarin 中打开默认浏览器?

java - 在首选项更改监听器上 - 单击运行两次后

java - 带有 view.getLocationOnScreen 的 NullPointerException