Свойство Lateinit во фрагменте не было инициализировано - PullRequest
0 голосов
/ 14 октября 2019

Почему мой фрагмент не входит в onCreateView, когда переменная объявлена ​​только в onCreate?

Это только говорит мне, что свойство lateinit beatBox не было инициализировано "Но это так!

beatBox isобъявлен как lateinit на уровне класса и определен в onCreate, но программа не входит в метод onCreateView. Я могу поместить в него файл Log.d и проверить тип создаваемого объекта! Он падает, если я не переопределю var beatBox, сделав ссылку на новый объект.

Почему мой фрагмент не попадет в onCreateView?

class BeatBoxFragment : Fragment() {

    private lateinit var beatBox: BeatBox

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        var beatBox = BeatBox(requireContext())
        Log.d("Crashing", beatBox.toString() + " has been created, yer program does not go into onCreateView")
    }
    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
    //var beatBox = BeatBox(requireContext())
    Log.d("Crashing", "The program does not enter onCreateView unless I uncomment the beatBox definition!)

    }

}

Ответы [ 2 ]

3 голосов
/ 14 октября 2019

Проблема в том, что вы переопределяете beatBox:

private lateinit var beatBox: BeatBox

fun test() {
    var beatBox = BeatBox() // Create new beatbox for `test() scope`.
                            // beatBox for class scope is still uninitialized.
}

Итак, просто избавьтесь от ключевого слова var в onCreate;)

0 голосов
/ 14 октября 2019

Вы пытаетесь объявить объект битбокса двойным использованием. поэтому удалите переменную, которую вы объявляете внутри метода oncreate.

 var beatBox = BeatBox(requireContext())  

Замените приведенный выше код на

beatBox = BeatBox(requireContext())

See your Mistake which i highlight so remove var from oncreate method

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