【问题标题】:Dialog shows twice对话框显示两次
【发布时间】:2012-09-26 07:52:56
【问题描述】:

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

谁能帮帮我?

【问题讨论】:

  • onTouch 为每个触摸事件调用。将手指放在屏幕上是一种触摸,释放是另一种,拖动也可以是另一种。至少有 2 个对话框。
  • 我明白了,我必须怎么做才能使框只显示一次?
  • 看一下触摸事件的内容,过滤一些动作。或在第一个触摸事件中禁用您的触摸区域(通过删除侦听器或禁用小部件上的触摸)
  • 你能告诉我怎么做吗?不好意思问太多了,我是android新手,谢谢你的关心

标签: android dialog spinner


【解决方案1】:

问题在于触摸事件检测到的交互比您想要的要多。它检测到按下和释放,因此被调用了两次。您只想检测新闻,您可以使用 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 禁用它。

【讨论】:

  • 它成功了,我用 (if(event.getAction() == MotionEvent.ACTION_DOWN 非常感谢你:D
【解决方案2】:

你必须使用 onClickListener!

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

【讨论】:

  • 它可以,但我必须点击edittext两次,因为我第一次点击框时弹出虚拟键盘,第二次点击时出现对话框,你知道吗我怎样才能让框在第一次点击时出现?
  • 没有注意到我正在添加一个带有现有答案的答案(10 分钟前?:/ meh...)无论如何,编辑我的答案,这样你就可以为你的键盘找到一个解决方案。跨度>
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 2021-03-22
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多