实际上我有一个触摸列表视图的列表视图我会得到一个弹出窗口。但是当我触摸列表时,我会获得多个单触摸窗口。
的活动:
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 :(得分: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!!
}
});
答案 1 :(得分: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);
}
答案 2 :(得分:0)
如果您使用onItemClickListener
,则可以使用ListView
。或者,如果您出于某种原因想要使用onTouchListener,则必须检查dialog
是否尚未显示,如果没有,则显示dialog
if(!dialog.isShowing()){
// Show the dialog
}
答案 3 :(得分:0)
Tnq每一个我都得到了解决方案
listView1.setOnTouchListener(new AdapterView.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){ // code
return true; } return false;
}