ViewPager2 |未调用 View.ClickListener
Posted
技术标签:
【中文标题】ViewPager2 |未调用 View.ClickListener【英文标题】:ViewPager2 | View.ClickListener not called 【发布时间】:2019-09-16 17:19:47 【问题描述】:我使用新的 android 小部件 ViewPager2 版本 1.0.0-alpha03,当我在其上设置点击侦听器时,未调用 onClick() 方法。
我的活动课:
class MainActivity : AppCompatActivity()
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportFragmentManager.beginTransaction()
.add(R.id.fragmentContent, SecondFragment.newInstance(), SecondFragment.TAG)
.addToBackStack(SecondFragment.TAG)
.commit()
我的片段:
class SecondFragment : Fragment()
companion object
val TAG = SecondFragment::class.java.canonicalName
fun newInstance(): SecondFragment = SecondFragment()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View?
return inflater.inflate(R.layout.fragment_second, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
viewPager2.setOnClickListener
Log.d("logi", "click : ")
我的布局xml文件:
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager2"
android:layout_
android:layout_/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
任何假设或解决方法?
【问题讨论】:
在我看来,我有两个想法:1)尝试分配背景颜色以查看元素是否实际布局为您认为的那样。 2) 尝试设置android:clickable=true
属性。
@LWChris 不工作
【参考方案1】:
我找到了解决办法! ViewPager2
包含 RecyclerView
,我们必须以 RecyclerView
的形式使用它。我创建了 RecyclerView.Adapter 并将 itemView 上的 ClickListener 设置为构造函数 RecyclerView.ViewHolder 和 VOILA!!!
在片段中:
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
viewPager2.adapter = ViewPager2Adapter
Log.d("logi", "clicked at : $it")
RecyclerView 适配器:
class ViewPager2Adapter(private val itemClickListener: (Int) -> (Unit)) :
RecyclerView.Adapter<RecyclerView.ViewHolder>()
val items = mutableListOf<Any>()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder =
ItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false))
override fun getItemCount(): Int = items.size
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int)
// bind your items
private inner class ItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)
init
itemView.setOnClickListener
Log.d("logi", "Click!") // WORKS!!!
itemClickListener(adapterPosition)
【讨论】:
以上是关于ViewPager2 |未调用 View.ClickListener的主要内容,如果未能解决你的问题,请参考以下文章
Android ViewPager2 setPageMargin 未解决
ViewPager2:setOnTouchListener() 不调用
ViewPager2嵌套RecyclerView滑动冲突解决办法