从适配器调用时处理折旧的 onActivityResult
Posted
技术标签:
【中文标题】从适配器调用时处理折旧的 onActivityResult【英文标题】:Handling depreciated onActivityResult when calling from Adapter 【发布时间】:2021-09-02 06:48:57 【问题描述】:这可能是一个愚蠢的问题,但我刚刚开始编程并且已经遇到了这个折旧问题。我有一个带有 Recycler View 适配器的活动,并使用了几个请求代码将带有 Intent 的数据从适配器发送到活动。
例如:
在回收站视图中:
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)
但是如何从适配器处理呢?
【问题讨论】:
这能回答你的问题吗? OnActivityResult method is deprecated, what is the alternative? 谢谢,之前看过那篇文章,但没有直接谈论适配器。但最终解决方案非常简单。 【参考方案1】:由于 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)
【讨论】:
以上是关于从适配器调用时处理折旧的 onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章