2016-11-21 130 views
-3

其实我已经上触摸列表视图中我会得到一个弹出窗口的列表视图。但是,当我在列表上触摸时,我得到了多个窗口单点触摸。在单点触摸越来越多点触摸事件

活动:

listView1.setAdapter(adapter); 
adapter.notifyDataSetChanged(); 
listView1.setOnTouchListener(new AdapterView.OnTouchListener() { 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 

     dialog = new Dialog(PendingOrdersActitvity.this); 
     dialog.setContentView(R.layout.itembumping); 
     dialog.show(); 

     list1=(ListView)dialog.findViewById(R.id.list1); 
     adapter = new CustomAdapter(PendingOrdersActitvity.this,itemsList1); 
     list1.setAdapter(adapter); 
     list1.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      // .... 
     }); 
     return true; 
     } 
    }); 
+0

这是因为onTouch会收到多个的TouchEvent状态,尝试学习OnTouchListener是如何工作的,这样就可以适当地调整你的代码,你还需要过滤特定的事件。阅读文档@ https://developer.android.com/reference/android/view/View.OnTouchListener.html#onTouch(android.view.View,android.view.MotionEvent) – JoxTraex

+0

你为什么不出去的OnItemSelectedListener ListView ccomponent - 只要您触摸列表项目,该方法就会调用。 – Bethan

回答

0

可以使用setOnClickListener代替TouchListener,里面的方法添加代码对话框调用。

如果你想多点触摸,你可以在你的活动

private int mActivePointerId; 
public boolean onTouchEvent(MotionEvent event) { 
    .... 
    // Get the pointer ID 
    mActivePointerId = event.getPointerId(0); 

    // ... Many touch events later... 

    // Use the pointer ID to find the index of the active pointer 
    // and fetch its position 
    int pointerIndex = event.findPointerIndex(mActivePointerId); 
    // Get the pointer's current position 
    float x = event.getX(pointerIndex); 
    float y = event.getY(pointerIndex); 
} 
0

使用此代码,你可以,如果你使用的是ListView使用onItemClickListener。或者,如果你想使用onTouchListener出于某种原因,你必须检查dialog不可见,如果没有的话显示OnTouchListener接口dialog

if(!dialog.isShowing()){ 
    // Show the dialog 
} 
1

onTouch方法监听许多不同的触摸事件行动。 所以,你应该分清事件的操作类型如下图所示。

listView1.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     switch (motionEvent.getAction()) { 
      case MotionEvent.ACTION_UP: 
       // Do something here for touch point up event 

       return true; 
      case MotionEvent.ACTION_DOWN: 
       // Do something here for touch point down event 

       return true; 
     } 

     return false; 
    } 
}); 

如果你只是想选择列表视图一个项目,我推荐你使用setOnItemClickListener,而不是使用setOnTouchListener

下面的代码说明如何使用setOnItemClickListener

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // Do something here!! 
    } 
}); 
0

TNQ每一个我得到了解决

listView1.setOnTouchListener(新AdapterView.OnTouchListener(){

  @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       if(event.getAction() == MotionEvent.ACTION_UP){ // code 

回归真实; }返回false;

}