恼人的吐司一直在展示如何阻止它

时间:2012-10-04 05:07:37

标签: android

每次我按下进入,即使它不应该出来,吐司仍然会弹出...

对我的代码采取了很多措施:

etAddMove.setOnKeyListener(new OnKeyListener() {

            @SuppressLint("NewApi")
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if(keyCode == KeyEvent.KEYCODE_ENTER && event.getRepeatCount() == 0){
                    String ssmoveName = etAddMove.getText().toString();
                    int x = ssmoveName.length() - 1;
                    if (ssmoveName.isEmpty() || Character.isWhitespace(ssmoveName.charAt(0)) || Character.isWhitespace(ssmoveName.charAt(x))) {
                        Toast.makeText(ListMovingNames.this, 
                                "Please enter a valid name! Avoid giving a blank name or white space at the beginning or end of the name", 
                                Toast.LENGTH_LONG).show();
                    }else{
                        try {
                            SQLHandler check = new SQLHandler(ListMovingNames.this);
                            check.open();
                            String scheck = check.checkMove(ssmoveName);
                            check.close();
                            if (!scheck.equals(ssmoveName)) {
                                Toast.makeText(ListMovingNames.this, "Move name already exist please give a different name", Toast.LENGTH_LONG).show();
                            } else{
                                SQLHandler entry = new SQLHandler(ListMovingNames.this);
                                entry.open();
                                entry.createMove(ssmoveName);
                                entry.setTodo(ssmoveName);
                                entry.close();
                                Intent i = new Intent(getApplicationContext(), StartMoving.class);
                                i.putExtra("moveName", ssmoveName);
                                startActivity(i);
                            }
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            SQLHandler entry = new SQLHandler(ListMovingNames.this);
                            entry.open();
                            entry.createMove(ssmoveName);
                            entry.setTodo(ssmoveName);
                            entry.close();
                            Intent i = new Intent(getApplicationContext(), StartMoving.class);
                            i.putExtra("moveName", ssmoveName);
                            startActivity(i);
                        }
                    }
                    return true;
                }

                return onKeyDown(keyCode, event);
            }
        });
如果我不想让它显示出来,你怎么能让这个家伙停下来......

修改

我想我知道为什么会发生这种情况,这一定是因为每次按下输入keyup并且keydown初始化这就是为什么第一次初始化是keydown,它调用条件并返回false,当调用keydown时,条件再次被调用这将返回true,使吐司显示。这就是我到目前为止所想的......

3 个答案:

答案 0 :(得分:0)

尝试使用以下,如果不工作,那么来了解。

Toast toast;
    toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
if(Yourcondition)
    {
        toast.show();
    }
    else
    {
        //nothing to display
    }

答案 1 :(得分:0)

最后解决这个糟糕的事。因为我怀疑toast一直显示的原因是每次按下回车键时都会调用keydown和keyup,这就是为什么两次调用进程会出现toast的原因,因为在调用进程时显示toast的条件是满足的第二次。

所以要避免KeyEvent.ACTION_DOWN必须存在。

public boolean onKey(View v, int keyCode, KeyEvent event) {
                // TODO Auto-generated method stub
                if ( (event.getAction() == KeyEvent.ACTION_DOWN  ) && (keyCode== KeyEvent.KEYCODE_ENTER)   )
                {               
                    // do something here
                    }
                    return true;
                }

答案 2 :(得分:-1)

使用此:

   Toast toast;
        toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT);

    if(Yourcondition)
        {
            toast.show();
        }
        else
        {
            //nothing to display
        }

在最后一个答案中,您正在使用.show方法创建吐司。如果陈述是真的,它将显示偶数。 因此,请从

中删除.show
toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();

这句话。

这可能会有所帮助。