Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将片段作为参数传递给RecyclerView.Adapter是一种不好的做法吗?帮助onClick_Java_Android_Kotlin - Fatal编程技术网

Java 将片段作为参数传递给RecyclerView.Adapter是一种不好的做法吗?帮助onClick

Java 将片段作为参数传递给RecyclerView.Adapter是一种不好的做法吗?帮助onClick,java,android,kotlin,Java,Android,Kotlin,我正在研究实现onClick for recycler视图的最佳方法,有很多好方法可以做到这一点,但是传递片段并引用片段中的函数是一个不错的解决方案吗? 第一次在这里问问题,请原谅格式不好 片段: class MyFragment: BaseFragment() { private val selectedList = ArrayList<Object>() ...... rvTempListView.adapter = MyAdapter(

我正在研究实现onClick for recycler视图的最佳方法,有很多好方法可以做到这一点,但是传递片段并引用片段中的函数是一个不错的解决方案吗? 第一次在这里问问题,请原谅格式不好

片段:

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)
        }
    }
}
classmyfragment:BaseFragment(){
private val selectedList=ArrayList()
......
rvTempListView.adapter=MyAdapter(
临时分组列表,
这
)
.......
已选择趣味项目(对象:对象){
if(selectedList中的对象){
selectedList.remove(对象)
}否则{
selectedList.add(对象)
}
}
}
RecyclerView.适配器:

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
                }            
            }
        }
.......

}
类MyAdapter(val uniqueObjects:MutableList,
val myFragment:myFragment)
:RecyclerView.Adapter(){
val TAG=javaClass.simpleName
.......
cardView.setOnClickListener{
mFragment.itemSelected(唯一对象[位置]){
如果(切换){
ivChecked.visibility=View.VISIBLE
toggle=!toggle
}否则{
ivChecked.visibility=View.INVISIBLE
toggle=!toggle
}            
}
}
.......
}
上面的解决方案效果很好,只是想知道这是否是一个糟糕的做法?
谢谢

不,这样做没有问题。适配器的生命周期与片段的生命周期相关联,因此这样做不会有内存泄漏或类似的风险

您可能希望通过一个只定义该方法的接口来实现这一点,以便出于关注点分离的原因在两者之间强制实施API,但这也很好