java - 将 fragment 作为参数传递给 RecyclerView.Adapter 是一种不好的做法吗?帮助点击

标签 java android kotlin

我正在研究为回收器 View 实现 onClick 的最佳方法,有很好的方法可以做到这一点,但是传递 fragment 并引用 fragment 中的函数是一个不错的解决方案吗? 第一次在这里提问,格式不好请见谅。

fragment :

class MyFragment: BaseFragment() {

    private val selectedList = ArrayList<Object>()

......
        rvTempListView.adapter = MyAdapter(
            tempGroupedList,
            this
        )
.......

    fun itemSelected(object: Object) {
        if (object in selectedList){
            selectedList.remove(object)
        } else {
            selectedList.add(object)
        }
    }
}

RecyclerView.Adapter:

class MyAdapter(val uniqueObjects: MutableList<Object>,
                val myFragment: MyFragment)
    : RecyclerView.Adapter<MyAdapter.ViewHolder>() {
    val TAG = javaClass.simpleName

.......
        cardView.setOnClickListener {
            mFragment.itemSelected(uniqueObjects[position]) {
                if (toggle){
                    ivChecked.visibility = View.VISIBLE
                    toggle = !toggle
                } else {
                    ivChecked.visibility = View.INVISIBLE
                    toggle = !toggle
                }            
            }
        }
.......

}

上述解决方案效果很好,只是想知道它是否是不好的做法? 谢谢!

最佳答案

不,这样做没有问题。您的适配器的生命周期与 fragment 的生命周期相关联,因此您这样做不会面临任何内存泄漏或类似情况的风险。

您可能希望通过仅定义该方法的接口(interface)来执行此操作,以便出于关注点分离的原因在两者之间强制执行 API,但这也很好。

关于java - 将 fragment 作为参数传递给 RecyclerView.Adapter 是一种不好的做法吗?帮助点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60160873/

相关文章:

android - 如何比较两个 ImageView?

java - 当我调用 LocationManger 时无法解析方法 ' requestLocationUpdate'

java - 将 Firebase 字符串数组检索到数组

java - 分枝效率

java - 使用 Google 发布 API 上传 AAB 文件时出现 SocketTimeoutException

android - 子类 SurfaceView 中的 findViewById 抛出 RuntimeException

kotlin - 找不到流量的契约(Contract)附件

javascript - 如何设置 Kotlin 多平台构建?

kotlin - Reactor - 只为慢速消费者保留/处理最新值

JavaFX有没有办法包含PDF文件