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