Где я должен разместить viewDataBinding.lifecycleOwner = this.viewLifecycleOwner с привязкой данных и жизненным циклом? - PullRequest
1 голос
/ 30 апреля 2020

Следующий код взят из примеров архитектуры проекта, вы можете увидеть его здесь .

Я не уверен, где я должен поместить viewDataBinding.lifecycleOwner = this.viewLifecycleOwner между onCreateView() и onActivityCreated(), не могли бы вы мне сказать?

class TasksFragment : Fragment() {

    private lateinit var viewDataBinding: TasksFragBinding  

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        viewDataBinding = TasksFragBinding.inflate(inflater, container, false).apply {
            viewmodel = viewModel
        }
        setHasOptionsMenu(true)

        //viewDataBinding.lifecycleOwner = this.viewLifecycleOwner    Can I place here?
        return viewDataBinding.root
    }


    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        // Set the lifecycle owner to the lifecycle of the view
        viewDataBinding.lifecycleOwner = this.viewLifecycleOwner    
    }

   ..
}

1 Ответ

1 голос
/ 07 мая 2020

onActivityCreated устарело. Вы должны использовать onViewCreated или onCreateView.

private var binding: TasksFragBinding? = null

override fun onCreate(savedInstanceState: Bundle?) {
    setHasOptionsMenu(true)
}

override fun onCreateView(
    inflater: LayoutInflater,
    container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {
    val viewDataBinding = TasksFragBinding.inflate(inflater, container, false).apply {
        viewmodel = viewModel
        lifecycleOwner = viewLifecycleOwner
    }
    this.binding = viewDataBinding 

    return viewDataBinding.root
}

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