无尽滚动kotlin回收视图/ListView

问题描述 投票:0回答:3

我正在拼命尝试使用 kotlin 在 Android 应用程序上实现无限滚动。所有教程要么毫无用处,因为它们没有正确解释事情。例如: https://github.com/chetdeva/recyclerview-bindings

它看起来很有希望,但作者使用了这样的短语 “把它放在你的 BindingAdapter 中”,所以我看看这个

BindingAdapter
是什么,我找到了一个 java 文件,但如果你在其中插入任何东西,我就会收到错误。就像我尝试的任何事情都直接失败一样。

其他教程都是用 java 编写的,即使使用“翻译为 kotlin”选项也毫无用处,因为翻译后的代码会抛出 100 个错误。

我尝试过类似的事情:

setContentView(R.layout.activity_main)
    list.layoutManager = LinearLayoutManager(this)
    list.hasFixedSize()
    list.adapter = ListAdapter(this, getLists())
    val list_view: RecyclerView = findViewById(R.id.list)
    fun setRecyclerViewScrollListener() {
        list_view.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
                val height = list_view.getHeight()

                val diff = height-dy
                if (diff < 1000){
                    /*load next list */
                }
            }
        })
    }
    setRecyclerViewScrollListener()
}

或者这个

val inflater = LayoutInflater.from(this@MainActivity)
val layout = inflater.inflate(R.layout.append_list, null, false)
button.setOnClickListener{screen.addView(layout)}

是否有一种防弹方法,您可以像 html 和 js 一样简单地附加元素?我在 2 分钟内写了这个片段。 Android/Kotlin 中是否有类似的“简单”方法?

$("#next").click(function(){
  $(".append_text").append("new text <img src='http://static.webshopapp.com/shops/015426/files/005031634/560x625x2/kek-amsterdam-wandtattoo-hase-forest-friends-braun.jpg'/>")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="next">Load</button>

<span class="append_text"> </span>

总的来说,我会因为选择错误的布局而收到很多错误。我尝试了Listview和contrainlayout以及回收布局和垂直滚动布局等等。是否有一个简单的 body 标签,您可以在其中简单地附加 xml 文件?

我认为我一直走错了路,因为我通过网络的眼睛来看待一切。开发。而android没有经典的DOM。任何人都可以用一个最小的示例向我解释如何在按钮单击/滚动时将 xml 文件附加到主 xml 文件吗?

android android-recyclerview kotlin infinite-scroll
3个回答
16
投票

我使用此方法向 Kotlin 中的回收器视图添加无限滚动功能:

private fun setRecyclerViewScrollListener() {
    scrollListener = object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            val totalItemCount = recyclerView!!.layoutManager.itemCount
            if (totalItemCount == lastVisibleItemPosition + 1) {
                Log.d("MyTAG", "Load new list")
                recycler.removeOnScrollListener(scrollListener)
            }
        }
    }
    recycler.addOnScrollListener(scrollListener)
}

变量lastVisibleItemPosition声明如下:

private val lastVisibleItemPosition: Int
        get() = linearLayoutManager.findLastVisibleItemPosition()

private lateinit var scrollListener: RecyclerView.OnScrollListener

每次需要将此功能添加到 recyclerView 时,只需调用

setRecyclerViewScrollListener()
方法即可。

希望有帮助,

莱昂纳多


2
投票

我不知道这是否能解决您的问题,但我用它来实现一个 RecyclerView,当滚动结束时,它会向我的 RecyclerView 添加新数据:

productsListActivityBinding.recyclerViewProducts.addOnScrollListener(object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            if (!recyclerView.canScrollVertically(1)){
                //function that add new elements to my recycler view
            }
        }

    })

0
投票

在滚动监听器的回收器视图中设置

 recycler.addOnScrollListener(your listener)
© www.soinside.com 2019 - 2024. All rights reserved.