Ни одного человека тут не смутило что он запускает фрагмент через интент блять?
но смысл кидать целый объект активити, если ты можешь таким же образом прокинуть туда контекст?
Почему у dialog fragment больше нет parent fragment?
Я тоже плавлюсь?
да, нинада так, но конкретно это обращение к view не выкинет npe, ведь там view?
Есть желающий пообщаться?
Почему ругается на this при переходе с фрагмента на фрагмент?
Может тебе ещё ключи дать от квартиры где деньги лежат?
Можно конкретнее?
В каком месте тут было инициализировано view?
Зато можно написать view?
requireActivity отдает тебе FragmentActivity, в которой есть контекст
но смысл кидать целый объект активити, если ты можешь таким же образом прокинуть туда контекст?
просто не относись к этому как к магическому методу, с которым все работает
Асхсхсхс. Учится человек
Наше дело ошибку убрать🤷♂️
Потом придёт с новой ошибкой, будем её чинить)
Краткая зарисовка: Senior stackoverflow developer
Он не написан на джава, на джава оболочка над ядром
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
У тебя же прям в ошибке написано в чем проблема )
Да, это я понял. Якобы не могу каст в RecyclerView здесь делать. Но не понимаю, как это исправить.
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
А где ты view объявляешь, ты же результат инфлейта не используешь?
Переведи дословно что там написано
View во фрагменте есть по дефолту 😀
Ну в смысле поле
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
kind reminder: смысл onCreateView – создать вью. не надо там искать что-то или делать манипуляции с вьюшками, тебе нужно просто создать лейаут фрагмента
все остальное — поиск вьюшек и др. манипуляции — делай в других, более поздних методах лайфсайкла
Аааа. не могу нулл ему передавать. Всё, голова не варит
Ну в смысле поле
Так он обращается к view в месте, где оно создается, когда его еще нет
Я тоже плавлюсь?
Я тоже плавлюсь?
Таки да ) о чем ему прямо сказано в стектрейсе
Я тоже плавлюсь?
да, нинада так, но конкретно это обращение к view не выкинет npe, ведь там view?
Оно выкидывает npe потому что view не проинициализировано
Та ты задавай вопрос тут вон 10 тысяч человек желают пообщаться
Ничего, я ещё ни одного умного не задал. Не парься
— Работа с view binding во фрагменте сделана не по уставу. Возможны утечки.
— bt_stills выглядит как синтетик, а view binding присутствует для красоты
Может тебе ещё ключи дать от квартиры где деньги лежат?
Мне кажется это спам @Harmonizr
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
«Уж сколько раз твердили миру…» что в onCreateView следует только создать и возвратить view, а настройку делать в onViewCreated.
Казалось бы, есть же view binding. Но нет, по-прежнему хотим весело плясать по граблям findViewById.
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
inflater.inflate(R.layout.fragment_beer_list, container, false)
beerRecyclerView = view?.findViewById(R.id.beer_recycler_view) as RecyclerView <- ВОТ ЗДЕСЬ
beerRecyclerView.layoutManager = GridLayoutManager(context, 2)
return view
}
Гуглил, пишут, что могут быть проблемы в id ресайклера, но там всё ок. RecyclerView наследуется напрямую от лейаута.
там вообще вью не инфлейтнутый возвращается, раз уж на то пошло
Чукча не читатель, чукча писатель, однако!
Казалось бы, есть же view binding. Но нет, по-прежнему хотим весело плясать по граблям findViewById.
Я кстати использую findView до сих пор. Мне удобно. Ну там где компоуза нет ещё
Можно конкретнее?
В рамках оффтопа: Пф-ф-ф. Если так кому-то нужен тест на безопасность APK, то Okay Google: download Mobile Security Framework (MobSF). Усе, вопрос закрыт.
inflater.inflate(R.layout.fragment_beer_list, container, false)
..
return view
В каком месте тут было инициализировано view?
ты пишешь inflater.inflate(что-то там, что-то там)
то есть ты вызываешь функцию inflate у класса LayoutInflater, который отвечает за создание лейаута
эта функция возвращает View, то есть созданный лейаут
метод getView возвращает текущий вью, но ты ведь результат инфлейтера не присвоил никуда, поэтому этого текущего вью нет
Тебе можно )
Но лучше отдать максимум на контроль компилятору.
Но лучше отдать максимум на контроль компилятору.
Мне не нравится вьюбиндинг по нескольким причинам. Во первых это ещё одна доп либа, а во-вторых она никак не упрощает код. Более того ещё и доп сущность какая-то появляется. А ещё она кодген вроде емнип
метод getView возвращает текущий вью, но ты ведь результат инфлейтера не присвоил никуда, поэтому этого текущего вью нет
Зато можно написать view?.xxxxx и это скомпилируется 😏
метод getView возвращает текущий вью, но ты ведь результат инфлейтера не присвоил никуда, поэтому этого текущего вью нет
Понял, спасибо. Странно, что это вообще компилируется
Ну да, оно генерится. Никакого оверхеда не замечаю. Зато за тебя делается контроль типов, всё не-нулл и просто невозможно обратиться ко вью, которого нет в лейауте.
Синтетик был няшный, но как раз позволял ошибочно импортнуть не тот лейаут с таким же вью ид и получить интересные глюки.
С точки зрения компилятора там всё норм.
Синтетик был няшный, но как раз позволял ошибочно импортнуть не тот лейаут с таким же вью ид и получить интересные глюки.
Ну, так не импортируй 😀😀