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

智能转换为“GridLayoutManager”是不可能的,因为“ViewManager”是一个可变属性,此时可能会更改

云承弼
2023-03-14

智能转换为“GridLayoutManager”是不可能的,因为“ViewManager”是一个可变属性,此时可能已更改

是错误,AndroidStudio显示时,试图添加一个除法器到我的回收视图。

PixelsFragment.kt

class PixelsFragment : Fragment() {

    private lateinit var recyclerView: RecyclerView
    private lateinit var viewManager: RecyclerView.LayoutManager
    private lateinit var viewAdapter: RecyclerView.Adapter<*>
    private var listener: OnFragmentInteractionListener? = null
    private lateinit var pixels: List<Pixel>

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        var numberOfColumns = 1

        viewManager = GridLayoutManager(this.context, numberOfColumns)
        viewAdapter = MyRecyclerViewAdapter(pixels)


        recyclerView = view!!.findViewById<RecyclerView>(R.id.RVJanuary).apply {
            setHasFixedSize(true)
            layoutManager = viewManager
            adapter = viewAdapter
            addItemDecoration(DividerItemDecoration(recyclerView.context, viewManager.getOrientation())) //Error on this line, underlining viewManager
        }


    }
}

我找到了这个答案,它说这样的问题可能是因为在执行该行时变量可能碰巧为< code>null,然后他们提供了3个解决方案。然而,根据我的理解,< code>viewManager决不能是< code>null,因为我将它声明为不可为null的变量。因此,我在寻找一种不同的解释和解决方法。

共有1个答案

田鸿彩
2023-03-14

您已经将< code>viewManager声明为< code > RecyclerView。LayoutManager。通用< code > RecyclerView。LayoutManager没有< code>getOrientation()方法-该方法仅存在于LinearLayoutManager及其子类中,例如您正在使用的GridLayoutManager。

错误消息告诉您的是,它不能假设RecyclerView.LayoutManager类型的viewManagerGridLayoutManager,因为它是一个可变属性-您可以将其设置为其他一些LayoutManager没有getOrience()方法。

解决这个问题最简单的方法是将< code>viewManager的类型更改为< code>GridLayoutManager。这样,只有一个< code>GridLayoutManager可用,并且< code>getOrientation()保证可用。

 类似资料: