1

Enterキーを押すたびに、出てこないはずのトーストが飛び出し続けます...

私のコードで多くのことをしてください:

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

見せたくないのに、どうやってこの男を止めさせることができますか...

編集

なぜこれが起こっているのか知っていると思います.Enterキーを押すたびにキーアップとキーダウンが初期化されるため、最初の初期化が条件を呼び出してfalseを返すキーダウンであり、キーダウンが呼び出されると条件が再度呼び出されます。 true、トーストを表示します。それは私が今まで考えていることです...

4

3 に答える 3

0

うまくいかない場合はフォローしてみて、それから知ってください。

Toast toast;
    toast.makeText(getApplicationContext(), "text", Toast.LENGTH_SHORT).show();
if(Yourcondition)
    {
        toast.show();
    }
    else
    {
        //nothing to display
    }
于 2012-10-04T05:20:34.003 に答える
0

最後にこのたわごとを解決します。トーストが表示され続ける理由は、Enterキーが押されるたびにキーダウンとキーアップが呼び出されるためだと思っていたので、プロセスが呼び出されたときにトーストを表示する条件が満たされているため、プロセスが2回呼び出されてトーストが表示されます2回目。

したがって、それを回避するには、存在する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;
                }
于 2012-10-15T03:24:14.160 に答える
-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();

この文。

これは役立つかもしれません。

于 2012-10-05T05:43:21.273 に答える