Android意外按钮点击ViewPager滑动

时间:2014-11-24 00:53:53

标签: android android-fragments android-viewpager

我有一个带有ViewPager的Activity,其中包含3个动态创建的片段。每个页面都有许多按钮和ImageButton,它们可以自己激活onTouch..MotionEvent.ACTION_DOWN。

我遇到的问题是,当我尝试滑动ViewPager时,这些按钮会意外激活。

有人可以推荐一种防止这种情况发生的方法吗?

由于 约什

3 个答案:

答案 0 :(得分:2)

而不是使用onTouch..MotionEvent.ACTION_DOWN。

在ImageButton上的

我将使它们实现;

.OnItemClickListener() /This ensures that only when clicked they will call the desired functionality, I suggest you to check it out this way and let me know.

希望它有所帮助,更多信息; The Documentation for OnItemClickListener

答案 1 :(得分:0)

我认为您关注的流程并不是很好,按钮还具有处理ACTION_DOWN触摸事件的业务代码,而父(ViewPager)总是需要处理触摸事件来检测滚动事件,因此按钮将处理首先触摸ACTION_DOWN触摸事件,然后将触摸传递给ViewPager。

您可以将业务代码移动到Button的OnClickListener或其他方式,您应该让按钮拦截触摸事件并且不将其传递给ViewPager(父视图)。

这可以通过自定义Viewpager类并在自定义ViewPager中添加变量来轻松处理,如下所示:

private boolean mTouchEnable = true;

@Override
public boolean onTouchEvent(MotionEvent arg0) {
    if (!mTouchEnable) {
        return false;
    }

    return super.onTouchEvent(arg0);
}    

该按钮需要对viewPager的引用,并在ACTION_DOWN中设置mTouchEnable = false,在ACTION_UP中设置为true

答案 2 :(得分:0)

我做了viewpager个按钮,我能够复制这个问题。

我解决了这个问题:

我的按钮有一个监听器OnClickListener

optionButton.setOnClickListener(this);

public void onClick(View v) {
  // your code here
}

然后我将此按钮添加到我的customPagerAdapter

customViewPager中,您必须覆盖onInterceptTouchEvent方法,如下所示:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
   super.onInterceptTouchEvent(ev);
   if (ev.getAction() == MotionEvent.ACTION_MOVE) {
      return true;
   }
   else{
      return false;
   }  
 }

此代码将拦截子视图中的MotionEvent.ACTION_MOVE(返回true),并且不会在子视图中拦截MotionEvent.ACTION_DOWN onClick事件。