Интеллектуальное приведение к «GridLayoutManager» невозможно, поскольку «ViewManager» является изменяемым свойством, которое к этому времени могло бы измениться. - PullRequest
0 голосов
/ 27 января 2019

«Интеллектуальное приведение к« 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
        }


    }
}

Я нашел этот ответ , в котором говорится, что такая проблема может быть вызвана тем, что к моменту выполнения строки переменная может быть null, а затем они предоставляют 3 решения. Однако, насколько я понимаю, viewManager ни в коем случае не может быть null, поскольку я объявил ее как переменную, не допускающую обнуление. Поэтому я ищу другое объяснение и решение.

1 Ответ

0 голосов
/ 27 января 2019

Вы объявили viewManager как RecyclerView.LayoutManager. Универсальный RecyclerView.LayoutManager не имеет метода getOrientation() - , метод существует только в LinearLayoutManager и его подклассах, таких как GridLayoutManager , который вы используете .

Сообщение об ошибке говорит вам о том, что он не может предположить, что viewManager типа RecyclerView.LayoutManager является GridLayoutManager, так как это изменяемое свойство - вы могли бы установить его для некоторого другого LayoutManager, который делает нет метода getOrientation().

Самый простой способ решить эту проблему - изменить тип вашего viewManager на GridLayoutManager. Таким образом, будет доступен только GridLayoutManager и гарантированно будет getOrientation().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...