Onclick on view pager in android 在我的代码中不起作用
Posted
技术标签:
【中文标题】Onclick on view pager in android 在我的代码中不起作用【英文标题】:Onclick on view pager in android does not work in my code 【发布时间】:2014-02-18 06:18:54 【问题描述】:我已经在我的代码中实现了视图寻呼机,并且我已经在视图寻呼机上放置了点击监听器,但是我的点击监听器不起作用,我将发布我的代码
viewpager.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
Log.i("***","***");
Toast.makeText(getActivity(), "XXXX", Toast.LENGTH_SHORT).show();
);
【问题讨论】:
【参考方案1】:我实现了自定义ViewPager
:
public class ClickableViewPager extends ViewPager
private OnClickListener mOnClickListener;
public ClickableViewPager(Context context)
super(context);
setup();
public ClickableViewPager(Context context, AttributeSet attrs)
super(context, attrs);
setup();
private void setup()
final GestureDetector tapGestureDetector = new GestureDetector(getContext(), new TapGestureListener());
setOnTouchListener(new OnTouchListener()
@Override
public boolean onTouch(View v, MotionEvent event)
tapGestureDetector.onTouchEvent(event);
return false;
);
public void setOnViewPagerClickListener(OnClickListener onClickListener)
mOnClickListener = onClickListener;
public interface OnClickListener
void onViewPagerClick(ViewPager viewPager);
private class TapGestureListener extends GestureDetector.SimpleOnGestureListener
@Override
public boolean onSingleTapConfirmed(MotionEvent e)
if(mOnClickListener != null)
mOnClickListener.onViewPagerClick(ClickableViewPager.this);
return true;
以及如何实现onClickListener
的例子:
ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
mViewPager.setOnViewPagerClickListener(new ClickableViewPager.OnClickListener()
@Override
public void onViewPagerClick(ViewPager viewPager)
//yourCode
);
【讨论】:
这是一个更好的答案。一个监听器用于整个 viewPager,而不是一个监听器用于其中的每个视图。这应该是公认的答案。一直在搜索几个小时才能找到这个! @Birrel 这个实现对你有用吗?对我来说,ViewPager 的 OnTouchListener 仅在我执行滚动时触发,单击被忽略。 @aleien,对不起,我不记得了。自从我使用这个解决方案以来,我几乎一直在编写 php,所以我需要一些 加快速度,然后才能查看我所做的并理解它。只是现在没有时间。根据我的评论,看起来部分或全部都解决了。对不起,我不能更有用。 @Gaket 你没有收到 onSingleTapConfirmed 事件? 不。我在那里放了一个调试中断,添加了一个 Log 语句以确保但没有调用回调。【参考方案2】:在 ViewPager 的项目中使用 clicklistener。这不起作用,因为 ViewPager 的子级正在拦截父级的事件(即 ViewPager)。例如,如果您使用 PagerAdapter 在 ViewPager 中添加 ImageView,则使用 ImageView 的单击使其变得简单
【讨论】:
我也在我的适配器内部使用过(instantiateItem()) 但它不起作用? 告诉我你用过什么? 与我的视图寻呼适配器类相比,是否可以在我的活动中实现点击侦听器? 你可以在activity中实现并且可以为Adapter类设置相同的监听器。给我看代码,然后我会展示它是如何完成的【参考方案3】:ViewPager 中没有 onClick 监听器,你可以使用 Recyclerview 代替 ViewPager 来达到同样的效果,如下所示
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_scroll_page"
android:layout_
android:layout_
android:orientation="horizontal"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
将 Recyclerview 用作水平视图,然后您可以滚动它并获取点击事件。请注意使用 RecyclerView.Adapter
【讨论】:
以上是关于Onclick on view pager in android 在我的代码中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
片段无法加载到 View_pager tabLayout [重复]
Pager View Controller 的根视图的大小与后续 View Controller 的大小不同