scroolListener отсоединяется от recyclerView, когда данные очищаются от адаптера - PullRequest
0 голосов
/ 04 июля 2018

В Kotlin я присоединяю слушателя прокрутки к представлению реселлера в onViewCreated () фрагмента. Я загружаю первые 20 записей, затем следующие 20 и так далее ..., когда я очищаю данные адаптера с целью поиска и перезагружаю искомые данные, тогда прослушиватель прокрутки не работает. Я сталкиваюсь с этой проблемой в загрузке больше функциональности.

Я решил эту проблему, заново подключив прослушиватель прокрутки после очистки адаптера.

Почему прослушиватель прокрутки отключается после очистки адаптера?

Ниже мой фрагмент

class Fragment: MvpFragment<View, PresenterImpl>(), View{

private lateinit var presenterImpl: PresenterImpl
private lateinit var myListAdapter: MyListAdapter
private var OFFSET: Long = 0
private var layoutManager: LinearLayoutManager? = null

private var mSearchTextWatcher: TextWatcher = object : EditextTextWatcher() {
    override fun afterTextChanged(editable: Editable) {
        if (TextUtils.isEmpty(editable)) {
            addScrool()
            myListAdapter.clear()
            loadData()

        } else {
            recyclerView.clearOnScrollListeners()

        }
    }
}

override fun onActivityCreated(savedInstanceState: Bundle?) {
    super.onActivityCreated(savedInstanceState)

}

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
    return inflater.inflate(R.layout.fragment, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    recyclerView!!.setHasFixedSize(true)
    addData!!.visibility = View.GONE
    layoutManager = LinearLayoutManager(activity)
    recyclerView!!.layoutManager = layoutManager

    searchData!!.addTextChangedListener(mSearchTextWatcher)

    myListAdapter= MyListAdapter(context!!, mutableListOf<Bean>(), this)
    recyclerView!!.adapter = myListAdapter

    idBtSearch.setOnClickListener {
        searchClick()
    }

    addScrool()

}

private fun addScrool() {

    recyclerView.addOnScrollListener(object : RecyclerViewScrollListener() {
        override fun onScrollUp() {

        }

        override fun onScrollDown() {

        }

        override fun onLoadMore(totalItemsCount: Int) {
            myListAdapter.setLoaded(true)
            myListAdapter.notifyItemInserted(myListAdapter.getListSize() - 1)
            myListAdapter.notifyDataSetChanged()

            OFFSET = totalItemsCount.toLong()

            Handler().postDelayed({
                if (search_name != null && search_name.text.toString().isEmpty()) {
                    if (idSortedOption.text == getString(R.string.name)) {
                        presenterImpl.loadDataByName(context!!, OFFSET, LIMIT)
                    } else {
                        presenterImpl.loadDataByDate(context!!, OFFSET, LIMIT)
                    }
                }
            }, 1000)

        }
    })
}

override fun onResume() {
    super.onResume()
    if (TextUtils.isEmpty(search_patient!!.text.toString())) {
        loadData()
    } else {
        searchClick()
    }
    OFFSET = 0
}

private fun searchClick() {
    val searchText = search_name!!.text.toString()
    if (searchText.length < 3) {
        Aarogya.showToastShort(context, getString(R.string.pls_enter_at_least_3_char))
    } else {
        Aarogya.hideKeyboard(activity!!)
        presenterImpl.searchData(context!!, search_name!!.text.toString().trim { it <= ' ' }, 1L, 20L)
    }
}

override fun createPresenter(): PresenterImpl {
    presenterImpl = PresenterImpl(this)
    return presenterImpl
}

override fun showData(list: MutableList<Bean>) {
    myListAdapter.setLoaded(false)

    if (OFFSET == 0L) {
        myListAdapter.run {
            clear()
            addAll(list)
        }
    } else {
        myListAdapter.addAll(list)
    }
}

override fun showSearchData(beanList: MutableList<Bean>) {
    myListAdapter.setLoaded(false)
    myListAdapter.clear()
    myListAdapter.addAll(beanList)

}

private fun loadData() {
    presenterImpl.loadDataByName(context!!, 0L, LIMIT)
}

companion object {
    private val LIMIT = 20L

    fun newInstance(): Fragment {
        return Fragment()
    }
}
}
...