Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 包含onTouchListener时OnclickListener不工作_Java_Android - Fatal编程技术网

Java 包含onTouchListener时OnclickListener不工作

Java 包含onTouchListener时OnclickListener不工作,java,android,Java,Android,当我试图在对话框中同时使用onTouchListener和onCLickListener作为ok按钮时,我遇到了一个小问题。基本上,当我单击OK按钮关闭对话框时,它会识别onTouch,但不会在我希望对话框关闭的位置执行onClick,对话框将保持打开状态。在我的实现中,我做了哪些不正确的事情 questionButton.setOnClickListener(new View.OnClickListener() { @Override public v

当我试图在对话框中同时使用onTouchListener和onCLickListener作为ok按钮时,我遇到了一个小问题。基本上,当我单击OK按钮关闭对话框时,它会识别onTouch,但不会在我希望对话框关闭的位置执行onClick,对话框将保持打开状态。在我的实现中,我做了哪些不正确的事情

    questionButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // custom dialog
            final Dialog dialog = new Dialog(MainActivity.this);
            dialog.setContentView(R.layout.custom_dialog);

            Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
            // if button is clicked, close the custom dialog

            dialogButton.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    setButtonPress(v, event);
                    return true;

                }
            });

            dialogButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            });

            dialog.show();
        }
    });

public void setButtonPress(View v, MotionEvent event){
            int sdk = android.os.Build.VERSION.SDK_INT;
            Button view = (Button) v;
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
                        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.love_heart_dark));
                    } else {
                        v.setBackground(getResources().getDrawable(R.drawable.love_heart_dark));
                    }
                    break;

                case MotionEvent.ACTION_UP:
                    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
                        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.love_heart));
                    } else {
                        v.setBackground(getResources().getDrawable(R.drawable.love_heart));
                    }
                    break;

                case MotionEvent.ACTION_CANCEL: {
                    if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
                        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.love_heart));
                    } else {
                        v.setBackground(getResources().getDrawable(R.drawable.love_heart));
                    }
                    break;
                }
            }
questionButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//自定义对话框
最终对话框=新对话框(MainActivity.this);
setContentView(R.layout.custom_对话框);
Button dialogButton=dialog.findViewById(R.id.dialog\u Button\u OK);
//如果单击按钮,则关闭自定义对话框
dialogButton.setOnTouchListener(新视图.OnTouchListener(){
@凌驾
公共布尔onTouch(视图v,运动事件){
设置按钮按下(v,事件);
返回true;
}
});
dialogButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
dialog.dismise();
}
});
dialog.show();
}
});
public void setButtonPress(视图v,运动事件){
int sdk=android.os.Build.VERSION.sdk\u int;
按钮视图=(按钮)v;
开关(event.getAction()){
case MotionEvent.ACTION\u DOWN:
if(sdk
不能在一个视图上同时使用两个操作

试试这个

Boolean b = false;

questionButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // custom dialog
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.custom_dialog);

        Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
        // if button is clicked, close the custom dialog

        dialogButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(b==false){
                setButtonPress(v, event);

                b=true;
                return true;
                }
                else{
                //perform on click here
                }
            }
        });

        dialog.show();
    }
});
        Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
        // if button is clicked, close the custom dialog

        dialogButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                setButtonPress(v, event);
                return false;

            }
        });

        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();
试试这个

Boolean b = false;

questionButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // custom dialog
        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.custom_dialog);

        Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
        // if button is clicked, close the custom dialog

        dialogButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(b==false){
                setButtonPress(v, event);

                b=true;
                return true;
                }
                else{
                //perform on click here
                }
            }
        });

        dialog.show();
    }
});
        Button dialogButton = dialog.findViewById(R.id.dialog_button_OK);
        // if button is clicked, close the custom dialog

        dialogButton.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                setButtonPress(v, event);
                return false;

            }
        });

        dialogButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        });

        dialog.show();

您一次只能管理一个侦听器,每当您使用touch listner时,您必须禁用
onClickListnere
或必须使用
onClickListnere
disable Toooch listner。您看到了吗。@farhana那么有没有办法执行ontouchlistener,禁用它,然后在一个功能中执行onclick all-in-in-one(如果有意义的话)?BasonTouch会改变按钮的背景颜色,以便用户知道他们选择了它,然后onClick会生效并导航?我尝试了下面的答案,但看到了注释以查看我的问题使用drawable to selection,如何同时管理两个侦听器,您必须为其他侦听器禁用一个de for setButtonPress以便您可以看到我正在尝试做什么我在发布答案之前尝试了这个,但我确实有一个小问题。基本上,当我触摸OK按钮(即使我按住OK按钮)时,它会关闭对话框。我想做的是用户看到他们单击了按钮(setButtonPress方法基本上改变了按钮颜色的背景)。因此,在这个对话框上我看不到这个,因为对话框会立即关闭。我将此更改为onClick,但之后它似乎不像MotionEvent。基本上,我只想让用户看到他们单击了按钮查看相关更新,因此当我添加代码来处理button pressCool时,它会更有意义,现在就开始操作,但看起来仍然是d除非else语句不正确,否则执行相同的操作。我在其中放置了dialog.dislose代码并返回true语句