OnLongClickListener未在ViewPager上触发

时间:2016-04-01 11:50:22

标签: android android-layout android-fragments

我很生气,却不明白我犯了什么错误,请帮忙。

我的布局xml中有ViewPager,此寻呼机我有一个FragmentStatePagerAdapter。基本上我在ViewPager上加载不同的片段。

但是片段的数量将由用户决定某些操作,并且从ViewPager开始不会加载任何片段,我的意思是FragmentStatePagerAdapter计数将为0。

现在我希望用户长按ViewPager来触发某些操作。但是当我向viewpager OnLongClickListener添加onLongClick时,方法永远不会触发:(

这是我的代码,

pageView.setOnLongClickListener(new View.OnLongClickListener() {
      @Override
      public boolean onLongClick(View v) {
            Log.d("sandeep","YES");
            return false;
      }
});

这里有什么错误?请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

OnClickListenerOnLongClickListener无法与ViewPager本身一起使用,因为它捕获触摸事件以便能够在页面之间滚动。

您应该设置onTouchListener,捕获ACTION_UP运动事件。当寻呼机有项目时,不要忘记删除监听器。

答案 1 :(得分:0)

在viewPager上,您可以设置OnTouchListener以使gestureDetector用于longpress检测。 但我建议你在加载到viewpager中的片段父布局上使用它。

public class MainActivity extends Activity {

    private static final String DEBUG_TAG = "Gestures";
    private GestureDetectorCompat mDetector; 

    // Called when the activity is first created. 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Instantiate the gesture detector with the
        // application context and an implementation of
        // GestureDetector.OnGestureListener
        mDetector = new GestureDetectorCompat(this,new Gesture());

        yourViewPager.setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                 return mDetector.onTouchEvent(event);
            }
        });
    }

  class Gesture extends GestureDetector.SimpleOnGestureListener{
       public boolean onSingleTapUp(MotionEvent ev) {
       }

       public void onLongPress(MotionEvent ev) {
         //your long press code here
       }

       public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
       float distanceY) {
       } 

       public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
       float velocityY) {
       }
   }

}