对话显示两次

时间:2012-09-26 07:52:57

标签: android dialog spinner

我正在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;           
    }
});

有人可以帮助我吗?

2 个答案:

答案 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!

如果你把手指放在屏幕上移动它,你会看到手指的每个新位置都会出现几个方框。