Это мой FragmentA, в котором размещается RecyleViewer:
Код: Выделить всё
class FragmentA : Fragment() {
private var _binding: FragmentABinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentCreateBinding.inflate(inflater, container, false)
...
return binding.root
}
}
Код: Выделить всё
class Adapter(
private val context: Context,
private var entries: MutableList
) : RecyclerView.Adapter() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.entry, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
...
holder.itemView.transitionName = "entry_$position"
holder.button.setOnClickListener {
val fragmentManager = (context as AppCompatActivity).supportFragmentManager
val editFragment = FragmentB()
val bundle = Bundle()
bundle.putInt("entryPosition", position)
editFragment.arguments = bundle
fragmentManager.beginTransaction()
.addSharedElement(holder.itemView, holder.itemView.transitionName)
.addToBackStack(null)
.replace(R.id.fragmentContainerView, editFragment)
.commit()
}
}
}
Код: Выделить всё
class FragmentB : Fragment() {
private var _binding: FragmentBBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentEditFlagBinding.inflate(inflater, container, false)
binding.entry.root.transitionName = "entry_${arguments?.getInt("entryPosition")}"
...
binding.saveButton.setOnClickListener {
requireActivity().supportFragmentManager.popBackStack()
}
return binding.root
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
sharedElementEnterTransition = MaterialContainerTransform().apply {
duration = 500
scrimColor = Color.TRANSPARENT
}
sharedElementReturnTransition = MaterialContainerTransform().apply {
duration = 500
scrimColor = Color.TRANSPARENT
}
}
}
Код: Выделить всё
class FragmentA : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
viewModel.data.observe(viewLifecycleOwner) {
adapter.setData(it)
(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ycleviewer