无法智能地强制转换为“ GridLayoutManager”,因为“ ViewManager”是一个可变属性,到此时可能已更改

时间:2019-01-27 04:10:05

标签: android kotlin android-recyclerview

“由于无法将SmartView强制转换为“ GridLayoutManager”,因为“ ViewManager”是可变的属性,而这一次可能已更改”

是AndroidStudio在尝试向我的RecyclerView添加分频器时显示的错误。

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
        }


    }
}

我发现this answer表示可能会出现此问题,因为在执行该行时变量可能恰好是null,然后提供了3个解决方案。但是,据我了解,viewManager绝不是null,因为我将其声明为不可为空的变量。因此,我正在寻找不同的解释和解决方案。

1 个答案:

答案 0 :(得分:3)

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

错误消息告诉您的是,它不能假定类型viewManager的{​​{1}}是RecyclerView.LayoutManager,因为它是可变属性-您可以将其设置为其他没有GridLayoutManager方法的LayoutManager

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