Java 关于单触获得多触事件

Java 关于单触获得多触事件,java,android,multi-touch,ontouch,Java,Android,Multi Touch,Ontouch,事实上,我有一个列表视图触摸列表视图,我会得到一个弹出窗口。但当我触摸列表时,一次触摸就会有多个窗口 活动: listView1.setAdapter(adapter); adapter.notifyDataSetChanged(); listView1.setOnTouchListener(new AdapterView.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event

事实上,我有一个列表视图触摸列表视图,我会得到一个弹出窗口。但当我触摸列表时,一次触摸就会有多个窗口

活动:

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

您可以使用setOnClickListener代替TouchListener,在方法内部为对话框调用添加代码

如果需要多点触摸,可以在活动中使用此代码


如果您使用的是
ListView
,则可以使用
onItemClickListener
。或者,如果出于某种原因要使用onTouchListener,则必须检查
对话框
是否不可见,如果不可见,则显示
对话框

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

OnTouchListener界面中的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;
    }
});
如果您只想在listview中选择一项,我建议您使用setOnItemClickListener而不是使用setOnTouchListener

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Do something here!!
    }
});
下面的代码描述了如何使用setOnItemClickListener

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // Do something here!!
    }
});
mListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//在这里做点什么!!
}
});

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;

}

这是因为onTouch将接收多个touchevent状态,请尝试学习OnTouchListener如何工作,以便您可以适当地调整代码,您还需要筛选特定事件。阅读文档@,android.view.MotionEvent)为什么不选择Listview ccomponent的OnItemSelectedListener?只要触摸列表项,此方法就会调用。