Как добавить переход общего элемента при переходе от представления ресайклера к фрагменту при использовании компонентов навигации и safeArgs?

Я хочу показать переход общего элемента из моего представления переработчика в класс фрагмента, я написал следующий код:

holder.view.setOnClickListener {
            val extras = FragmentNavigatorExtras(
                holder.view.ivPersonImage to "imageView"
            )
            it.findNavController().navigate(
                HomeFragmentDirections.actionNavHomeToTransactionFragment(
                    customerId,
                    customerName,
                    customerPhoneNumber,
                    imageString
                ), null, null, extras
            )
        }

он показывает ошибку в .navigate как:

 None of the following functions can be called with the arguments supplied: 
private open fun navigate(@NonNull p0: NavDestination, @Nullable p1: Bundle?, @Nullable p2: NavOptions?, @Nullable p3: Navigator.Extras?): Unit defined in androidx.navigation.NavController
public open fun navigate(@IdRes p0: Int, @Nullable p1: Bundle?, @Nullable p2: NavOptions?, @Nullable p3: Navigator.Extras?): Unit defined in androidx.navigation.NavController

в классе Fragment я использую:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        sharedElementEnterTransition = TransitionInflater.from(context).inflateTransition(android.R.transition.move)
    }

похоже, что safeArgs не позволяет показывать переход. Я новичок в Android, и мне очень сложно понять переходы и анимацию. Пожалуйста, помогите мне, я застрял здесь уже столько дней


person Anmol Singh Sahi    schedule 06.06.2020    source источник


Ответы (1)


SafeArgs позволяет установить общий переход. Просто проверьте navigate() документация, есть перегрузка с двумя параметрами: NavDirections и Navigator.Extras. Итак, ваш код должен выглядеть так:

holder.view.setOnClickListener {
    val extras = FragmentNavigatorExtras(holder.view.ivPersonImage to "imageView")
    it.findNavController().navigate(
        HomeFragmentDirections.actionNavHomeToTransactionFragment(
            customerId,
            customerName,
            customerPhoneNumber,
            imageString
        ), 
        extras
    )
}
person the korovay    schedule 01.04.2021