Это плохая практика, чтобы передать фрагмент в качестве аргумента RecyclerView.Adapter? Чтобы помочь onClick - PullRequest
0 голосов
/ 11 февраля 2020

Я исследовал лучшие способы реализации onClick для представлений переработчика, есть хорошие способы сделать это, но является ли передача фрагмента и ссылка на функцию во фрагменте достойным решением? Впервые задаю вопрос здесь, так что извините за плохой формат.

Фрагмент:

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

}

Приведенное выше решение прекрасно работает, просто интересно если это плохая практика или нет? Спасибо!

1 Ответ

0 голосов
/ 11 февраля 2020

Нет, с этим нет проблем. Жизненный цикл вашего адаптера привязан к жизненному циклу вашего фрагмента, поэтому вы не рискуете утечками памяти или чем-то подобным.

Возможно, вы захотите сделать это через интерфейс, который определяет только этот метод, чтобы применять API-интерфейс между ними по причинам разделения проблем, но это тоже хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...