2

我正在我的 上制作一个对话框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;           
    }
});

任何人都可以帮助我吗?

4

2 回答 2

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

如果您想要一个更简单的解决方案,您可以将您的onTouchListenerfor 替换为onClickListener.

而不是设置setOnTouchListener(new OnTouchListener()和覆盖public boolean onTouch(View arg0, MotionEvent arg1)替换这两行代码:

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

如果您想忽略键盘,请尝试使用此问题禁用它。

于 2012-09-26T08:17:04.233 回答
0

您必须使用 onClickListener!

如果您将手指放在屏幕上并四处移动,您会看到针对您手指的每个新位置出现几个框。

于 2012-09-26T08:12:32.177 回答