这可能是一个愚蠢的问题,但我刚刚开始编程,已经遇到了这个折旧问题。我有一个带有Recycler-View适配器的活动,并使用几个请求代码将Intents数据从适配器发送到该活动。
例如:
在回收商视图中:
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"}
activity.startActivityForResult(intent, saveRequestCode)
以及在活动中:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode==saveRequestCode&&resultCode == RESULT_OK) {
if (data != null) {
uri = data?.data!!
saveData(uri)
}
}
}
我可以在从活动调用时处理折旧
通过声明:
val saveIntent=registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
if (result.data != null) {
uri = result.data?.data!!
saveData(uri)
}
}
}
并调用意图:
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"
saveIntent.launch(this)
}
但是如何从适配器处理它呢?
由于registerForActivityResult需要实现AppCompatActivity,我无法从适配器调用它,但我可以将saveIntent变量作为recyclerView适配器的参数传递。因此,事实证明,它就像在活动中声明ActivityResultLauncher变量一样简单
saveIntent=registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
if (result.data != null) {
uri = result.data?.data!!
saveData(uri)
}
}
}
并传送到适配器
adapter=ItemAdapter(list,saveIntent)
以及在适配器中
class ItemAdapter(private var list: MutableList<Item>,
private val saveIntent: ActivityResultLauncher<Intent>,
) :
RecyclerView.Adapter<ItemAdapter.ItemListViewHolder>() {
override fun onBindViewHolder(holder: ItemListViewHolder, position: Int) {
holder.save.setOnClickListener{
Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"
saveIntent.launch(this)
}