Android RecyclerView中的ViewPager:ViewPager截取父视图';s咔嗒声
我有一个包含CardView的Recyclerview。CardView包含一个ViewPager2和一些其他视图(文本等)。我想捕捉用户在CardView(父级)上单击任意位置的时间,并运行一些逻辑。问题:即使ViewPager是CardView的子项,它仍然会干扰CardView的onClickListener,如果用户单击绘制ViewPager的CardView部分,则永远不会触发CardView的listener 从根本上说,这很有趣,因为我希望父视图取代子视图中的任何单击侦听器,但ViewPager在这方面似乎是一种独特的布局 我已经研究过解决方案,但我不确定其中是否有最佳实践,因为在我的案例中,onClick逻辑驻留在一个RecyclerView中。因为我在ViewHolder的init方法中实例化侦听器,所以应该避免不必要的对象实例化,但我要谨慎,不要做出效率低下的解决方案 我的解决方案的要求是:Android RecyclerView中的ViewPager:ViewPager截取父视图';s咔嗒声,android,android-recyclerview,android-viewpager,android-viewpager2,Android,Android Recyclerview,Android Viewpager,Android Viewpager2,我有一个包含CardView的Recyclerview。CardView包含一个ViewPager2和一些其他视图(文本等)。我想捕捉用户在CardView(父级)上单击任意位置的时间,并运行一些逻辑。问题:即使ViewPager是CardView的子项,它仍然会干扰CardView的onClickListener,如果用户单击绘制ViewPager的CardView部分,则永远不会触发CardView的listener 从根本上说,这很有趣,因为我希望父视图取代子视图中的任何单击侦听器,但Vi
class RaffleViewHolder(cardView: CardView) : RecyclerView.ViewHolder(cardView), View.OnClickListener {
val itemName = cardView.itemName
val viewPager = cardView.viewPager
val featuredWedge = cardView.quarter_circle
val imageViewPagerAdapter = RaffleItemViewPagerAdapter()
init {
viewPager.adapter = imageViewPagerAdapter
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
viewPager.setPageTransformer(ViewPagerDepthPageTransformer())
}
cardView.setOnClickListener(this)
}
override fun onClick(view: View?) {
Timber.d("onclick fired in recyclerviewadapter")
//do stuff. This is only reached for clicks outside of the ViewPager
}
}
用于CardView的XML
<androidx.cardview.widget.CardView
android:id="@+id/itemCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:elevation="2dp"
app:cardBackgroundColor="@color/white">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="300dp"
android:layout_height="300dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/itemName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/viewPager" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>