2014-11-24 82 views
3

我有一个活动与ViewPager与3动态创建片段。每个页面都有许多Buttons和ImageButtons,它们自己在onTouch..MotionEvent.ACTION_DOWN上激活。安卓意外按钮点击ViewPager刷卡

我遇到的问题是,这些按钮激活时意外我试图刷卡ViewPager。

任何人都可以推荐一种方法来防止这种情况发生?

感谢 乔希

+0

你有没有想过如何处理这个问题?我面临着完全相同的问题。即使使用OnClickListener,它仍然会触发此侦听器,而不是滑动 – user2302510 2015-07-08 06:19:03

回答

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

+0

这似乎是一个不错的选择,但由于应用程序而不起作用。我的按钮被设置为执行功能,因为它们被按下。例如,按住按钮并打开一个灯泡。放开按钮,灯泡熄灭。 – Josh 2014-11-26 18:31:56

+0

在这种情况下,你可以使用onLongClickListener在http://developer.android.com/reference/android/view/View.OnLongClickListener.html看到更多。希望它有帮助。 一旦它被解雇,你可以“打开灯泡”,并释放你可以“关掉它” – Nullpoint 2014-11-26 18:36:42

+0

问题是,我试图不触发按钮。我试图滑动到ViewPager的下一页,而不触发它。 – Josh 2014-11-26 19:54:43

0

我认为你是按照流量是不是真的不错,按钮也有业务代码来处理ACTION_DOWN触摸事件和父(ViewPager)总是需要处理触摸事件检测滚动事件,所以按钮将首先处理ACTION_DOWN触摸事件,然后将触摸传递给ViewPager。

您可以将业务代码到按钮的OnClickListener或其他方式,你应该让拦截触摸事件的按键而没有把它传递给ViewPager(父视图)。

这可能是容易处理的定制Viewpager类和自定义添加变量ViewPager这样的:

private boolean mTouchEnable = true; 

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

    return super.onTouchEvent(arg0); 
}  

的按钮将需要viewPager参考,并设置mTouchEnable在ACTION_DOWN = FALSE和真正的ACTION_UP

+0

谢谢您的答案,但这不是我的目标。我希望ViewPager可以滑动,按钮可以点击。我只想忽略按钮点击一秒钟,直到它决定它是否真正是点击或滑动ViewPager。 – Josh 2014-11-24 10:06:10

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; 
    } 
} 

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