我正在EditText
上创建一个对话框,所以当我触摸EditText
时,框会显示(setOntouchListener)。问题是:当我触摸EditText
时,框会显示两次(当我点击框中的关闭按钮时,第二个框显示并且框的内容完全相同)
FoodText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.customfoodinput);
dialog.setTitle("Insert your Food");
spinner1 = (Spinner) dialog.findViewById(R.id.spinner_foodTime);
spinner2 = (Spinner) dialog.findViewById(R.id.spinner_foodType);
foodtimeArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner1.setAdapter(foodtimeArray);
foodtypeArray.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner2.setAdapter(foodtypeArray);
Button btntampung = (Button) dialog.findViewById(R.id.btn_inputfood);
btntampung.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Object item = spinner1.getSelectedItem();
String dataspinner = item.toString();
Object item2 = spinner2.getSelectedItem();
String dataspinner2 = item2.toString();
dialog.dismiss();
FoodText.setText(dataspinner + "; " + dataspinner2);
}
});
dialog.show();
return false;
}
});
有人可以帮助我吗?
答案 0 :(得分:6)
问题在于触摸事件会检测到比您想要的更多的交互。它检测到按下和释放,因此它被调用两次。您只想检测新闻,可以使用if(if(arg1.getAction(); == MotionEvent.ACTION_DOWN)
)检查touchListener中事件的类型:
FoodText.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN)
showDialog();
return false;
}
});
如果您想要更简单的解决方案,可以将onTouchListener
替换为onClickListener
。
而不是设置setOnTouchListener(new OnTouchListener()
并覆盖public boolean onTouch(View arg0, MotionEvent arg1)
取代这两行代码:
FoodText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
如果您想忽略键盘,请尝试使用this question禁用它。
答案 1 :(得分:0)
你必须使用onClickListener!
如果你把手指放在屏幕上移动它,你会看到手指的每个新位置都会出现几个方框。