@foonfyrick

Почему не могу использовать view binding в наследнике базового фрагмента?

Я сделал базовый фрагмент:
open class BaseFragment(val activity:Int) : Fragment() {
    lateinit var mView: View
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        mView=LayoutInflater.from(requireContext()).inflate(activity,container,false)
        return mView
    }
}

От него наследовал остальные, но экран наследников отображается лишь в том случае, если я использую синтетические импорты через id, если же я создаю биндинг
private lateinit var mBinding : FragmentAddBinding
и начинаю от него создавать ресайкл вью, и взаимодействовать с кнопками, то ошибки нет, а экран пустой.
  • Вопрос задан
  • 290 просмотров
Решения вопроса 1
@foonfyrick Автор вопроса
//https://chetangupta.net/viewbinding/
abstract class ViewBindingFragment<VB : ViewBinding> : Fragment() {

    private var _binding: ViewBinding? = null
    abstract val bindingInflater: (LayoutInflater, ViewGroup?, Boolean) -> VB

    @Suppress("UNCHECKED_CAST")
    protected val binding: VB
        get() = _binding as VB

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        _binding = bindingInflater.invoke(inflater, container, false)
        return requireNotNull(_binding).root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        setup()
    }

    abstract fun setup()

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

class ProfileFragment :ViewBindingFragment<ProfileLayoutBinding>() {
  override val bindingInflater: (LayoutInflater) -> ViewBinding 
          = ProfileLayoutBinding::inflate
          
  override fun setup(){
  	//.. do stuff with binding variable
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы