RecyclerView shared element transition when clicking on item is not executed

15 views Asked by At

I'm trying to trigger a transition to the detail page when clicking on a Recyclerview item. The detail page uses a ViewPager2 tag because it displays multiple images. The recyclerView has a normal ImageView which displays the first image of several images in an array. If I click on it, I get to the detail page where this image is also displayed first in ViewPager2, so far as I understand. The problem is that absolutely nothing happens. In other words, the small picture of RV should be enlarged and displayed on the details page. Something like this: https://developer.android.com/guide/fragments/animate

class NearbyAdapter(private val dataSet: ArrayList<Store>,private val ctx: Context) :
RecyclerView.Adapter<NearbyAdapter.ViewHolder>() {

 private var onClickDetailListener: OnClickDetailListener? = null


 class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
  
   val hauptBild: ImageView

   ...


   fun bind(id: String) {
        ViewCompat.setTransitionName(hauptBild, id);
    }

 
 init {
  ...

  }
}


override fun onBindViewHolder(viewHolder: ViewHolder, position: Int) {
     
    var store = dataSet[position]

    viewHolder.itemView.transitionName = viewHolder.bind(store.name!!).toString()

    viewHolder.itemView.setOnClickListener {
        if (onClickDetailListener != null) {
            onClickDetailListener!!.onClick(store,viewHolder.itemView)
        }
    }


}

fun setOnClickDetailListener(onClickListener: OnClickDetailListener) {
    this.onClickDetailListener = onClickListener
}

interface OnClickDetailListener {
    fun onClick(store: Store, itemView: View)

}

MainActivity.kt:

nearbyAdapter!!.setOnClickDetailListener(object : NearbyAdapter.OnClickDetailListener {
            override fun onClick(store: Store, itemView: View) {

           if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    val intent = Intent(this@MainActivity,DetailSite::class.java)
                    intent.putExtra("transitionName", itemView.transitionName)
                    intent.putExtra("store", store)                        

                    val options = ActivityOptions
                        .makeSceneTransitionAnimation(this@MainActivity, itemView, ViewCompat.getTransitionName(findViewById(R.id.storeImage)))

                    startActivity(intent,options.toBundle())

           }

    }
})

DetailSite.kt:

  class DetailSite : AppCompatActivity() {

   override fun onCreate(savedInstanceState: Bundle?) {
    ...
    setContentView(view)


    postponeEnterTransition();

    val extras = intent.extras
    ViewCompat.setTransitionName(binding.sliderViewPager,extras?.getString("transitionName"));

 
  }
0

There are 0 answers