FirstActivity代码
class FirstActivity : AppCompatActivity() {
private lateinit var mBinding: ActivityFirstBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityFirstBinding.inflate(layoutInflater)
setContentView(mBinding.root)
init()
}
private fun init() {
mBinding.button.setOnClickListener {
launcher.launch(50)
}
}
private val launcher =
registerForActivityResult(MyContract(), object : ActivityResultCallback<User?> {
override fun onActivityResult(result: User?) {
result?.let {
mBinding.textView.text =
"name =${it.name} sex = ${it.sex} height = ${it.height}"
}
}
})
inner class MyContract : ActivityResultContract<Int?, User?>() {
override fun createIntent(context: Context, input: Int?): Intent {
return Intent(context, SecondActivity::class.java).putExtra(
SecondActivity.FOR_RESULT,
SecondActivity.FOR_RESULT_CODE
)
}
override fun parseResult(resultCode: Int, @Nullable intent: Intent?): User? {
return if (resultCode == SecondActivity.GET_RESULT_CODE) {
val user = intent?.getParcelableExtra<User>(SecondActivity.GET_RESULT)
user
} else null
}
}
}
SecondActivity代码
class SecondActivity : AppCompatActivity() {
companion object {
const val FOR_RESULT = "for_result"
const val FOR_RESULT_CODE = 1001
const val GET_RESULT = "get_result"
const val GET_RESULT_CODE = 2000
}
private lateinit var mBinding: ActivitySecondBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivitySecondBinding.inflate(layoutInflater)
setContentView(mBinding.root)
init()
}
//只有点击按钮才会向firstActivity返回数据,直接finish不会返回数据
private fun init() {
mBinding.secondButton.setOnClickListener {
val code = intent.getIntExtra(FOR_RESULT, 0)
if (FOR_RESULT_CODE == code) {
val intent = Intent()
intent.putExtra(GET_RESULT, User("111", 1, 222))
setResult(GET_RESULT_CODE, intent)
finish()
}
}
}
}
User代码
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class User(
var name: String,
var sex: Int,
var height: Int
) : Parcelable
使用kotlin的Parcelable
id 'kotlin-parcelize'