android 反向布局和堆栈从结束抛出错误

bzzcjhmw  于 2023-03-21  发布在  Android
关注(0)|答案(1)|浏览(106)
private fun initRecyclerView(){
       studentRecyclerView.layoutManager=LinearLayoutManager(this)

        layoutManager.reverseLayout=true
        layoutManager.stackFromEnd=true

        adapter = StudentRecyclerViewAdapter{
            selectedItem:Student -> listitemclicked(selectedItem)
        }
        studentRecyclerView.adapter=adapter
        displayStudentList()
    }

我想反转recycler视图,但是每当我使用layoutManager.reverseLayoutlayoutManager.stackFromEnd时,这些行都会抛出一个错误。
我不知道该怎么办。

bybem2ql

bybem2ql1#

setReverseLayoutsetStackFromEnd都是LinearLayoutManager类上的函数,而不是LayoutManager基类上的函数,所以你必须确保你引用的变量是LinearLayoutManager类型(或者强制转换):

// implicitly setting the type to the class you're constructing
val layoutManager = LinearLayoutManager(this)

// or you can just specify it explicitly
val layoutManager: LinearLayoutManager = LinearLayoutManager(this)

// now you can configure that object, and set it on the RecyclerView
layoutManager.setReverseLayout(true)
studentRecyclerView.layoutManager = layoutManager

studentRecyclerView.layoutManager的类型只是LayoutManager的基类(所以你可以提供布局管理器的不同实现),所以如果你 * 读 * 那个属性,你只会得到一个LayoutManager.如果你想把它当作一个LinearLayoutManager来处理(并且访问那个类型的函数和属性),你必须强制转换它:

studentRecyclerView.layoutManager = LinearLayoutManager(this)
...
(studentRecyclerView.layoutManager as LinearLayoutManager).setReverseLayout(true)

这是混乱的,但它通常是更好的,只是持有自己的引用与正确的类型-没有必要复杂的事情,特别是在一个简单的设置块!
因为是Kotlin,所以set*函数可以写成属性(例如layoutManager.reverseLayout = true),如果合适的话,IDE会将函数版本更改为属性版本。

相关问题