当前位置: 首页 > 知识库问答 >
问题:

无尽滚动kotlin回收视图/ListView

许黎明
2023-03-14

我正在拼命地尝试在一个使用Kotlin的android应用上实现无休止的滚动。所有的教程要么是无用的,因为他们没有正确地解释事情。例如:https://github.com/chetdeva/recyclerView-bindings

它看起来很有前途,但作者使用了这样的短语,比如“把这个放在你的bindingadapter中”,所以我查看了这个bindingadapter是什么,我找到了一个java文件,但如果你在其中插入任何东西,我会得到错误。就像我尝试的任何事情都直接失败了。

其他教程都是用java编写的,即使带有“Translate to 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)}
$("#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文件中吗?

共有1个答案

韩自怡
2023-03-14

我使用此方法向Kotlin中的recyclerview添加无尽滚动功能:

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

列奥纳多

 类似资料:
  • 我有一个endless Recycler视图,其中包含使用JSoup从一个在线论坛线程中提取的数据。recyclerview将不断填充自己,直到用户到达最后一页。我想膨胀一个“端视图”,一旦用户到达最后一页,滚动到最后一个可见的项目,但我无法检索它。 我尝试使用getItemCount()和findLastVisibleItemPotion()从回收器视图linearlayoutManager。它

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我有一个动态填充的RecyclerView。 当新消息到达时,我使用此代码向下滚动到最后一个条目: 现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?

  • 我有一个水平回收视图。每个子级包含一个TextView和一个垂直RecyclerView。垂直RecyclerView的子级仅包含TextView。 垂直滚动非常平滑,但水平滚动滞后很多。我已经尝试在onBindViewHolder中使用swapAdapter,而不是setAdapter,但这并没有解决问题。我也尝试过更改数据集并调用notifyDataSetChanged(),但这也没有帮助。

  • 我有一个像相册这样的项目列表,我通过RecyclerView显示它。 此外,每个项目都有一个按钮,通过单击该按钮可以向服务器发送一些数据,然后滚动到列表中的下一个位置。 所以我的问题是: 如果调用了smoothScrollToPosition()方法,如何防止RecyclerView手动滚动(手势),但滚动到某个位置?

  • 我正在使用下面的代码创建一个回收器视图。recyclerview有一个网格布局管理器,其项计数最多为每行2个。 不幸的是,我嵌套在ConstraintLayout中的回收器视图根本没有滚动。我错过了什么?约束布局是否支持相同的?