从Adapter调用时对ActivityResult进行折旧处理



这可能是一个愚蠢的问题,但我刚刚开始编程,已经遇到了这个折旧问题。我有一个带有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)
}

相关内容

  • 没有找到相关文章

最新更新