我正在拼命尝试使用 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 文件吗?
我使用此方法向 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()
方法即可。
希望有帮助,
莱昂纳多
我不知道这是否能解决您的问题,但我用它来实现一个 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
}
}
})
在滚动监听器的回收器视图中设置
recycler.addOnScrollListener(your listener)