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

智能强制转换为“GridLayoutManager”是不可能的,因为“ViewManager”是一个可变属性,此时可能已经发生了变化

贺自明
2023-03-14

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

是AndroidStudio在尝试向RecolyerView添加分隔符时显示的错误。

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
        }


    }
}

共有1个答案

蓝侯林
2023-03-14

您已将viewmanager声明为recyclerview.layoutmanager。通用的RecyclerView.LayoutManager没有GetOrientation()方法-该方法仅存在于LinearLayoutManager及其子类(如您正在使用的GridLayoutManager)上。

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

解决这一问题的最简单方法是将ViewManager的类型更改为GridLayoutManager。这样,只有GridLayoutManager可用,而getOrientation()保证可用。

 类似资料: