2
\$\begingroup\$

This is the code of my function to endless scrolling. It's a good practice to bind new disposable in onscroll listener? What do you think about my code?

   private fun searchData(srsearch: String) {
    val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(et_search_querry.windowToken, 0)

    rv_results.layoutManager = LinearLayoutManager(this)
    val manager = rv_results.layoutManager as LinearLayoutManager
    pb_fetch.visibility = View.VISIBLE
    disposable =
            wikiApiServe.getRecordsByQuerry("query", "json", "search", srsearch)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(
                            { result ->
                                var continueS = result._continue._continue
                                var offset = result._continue.sroffset
                                var searchS = srsearch

                                pb_fetch.visibility = View.GONE
                                rv_results.adapter = ResultsAdapter(result.query.search, this)
                                tv_search_results.text =
                                        String.format(resources.getQuantityText(R.plurals.results_found,
                                                result.query.searchinfo.totalhits).toString(), result.query.searchinfo.totalhits)
                                rv_results.addOnScrollListener(object : RecyclerView.OnScrollListener() {
                                    override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
                                        super.onScrolled(recyclerView, dx, dy)
                                        if (!isLoading) {
                                            if (manager.findLastCompletelyVisibleItemPosition()
                                                    >= rv_results.adapter.itemCount - 1) {
                                                isLoading = true
                                                pb_fetch.visibility = View.VISIBLE
                                                disposable?.dispose()
                                                disposable = wikiApiServe.getMoreRecords("query", "json", "search", continueS, offset, searchS)
                                                        .subscribeOn(Schedulers.io())
                                                        .observeOn(AndroidSchedulers.mainThread())
                                                        .subscribe({ result ->
                                                            isLoading = false
                                                                    continueS = result._continue._continue
                                                                    offset = result._continue.sroffset
                                                                    pb_fetch.visibility = View.GONE
                                                                    (rv_results.adapter as ResultsAdapter).addMore(result.query.search)
                                                                }, { _ ->
                                                            isLoading = false
                                                            pb_fetch.visibility = View.GONE
                                                            Toast.makeText(this@MainActivity,
                                                                    "Something went wrong try again",
                                                                    Toast.LENGTH_SHORT).show()
                                                        })
                                            }
                                        }
                                    }
                                })
                            },
                            { _ ->
                                pb_fetch.visibility = View.GONE
                                Toast.makeText(this,
                                        "Something went wrong try again",
                                        Toast.LENGTH_SHORT).show()
                            }
                    )
}
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.