4

13 桁のバーコードを読み取る EditText があります。私がやりたいことは、仮想キーボードを画面に表示したままにし、EditText に常にフォーカスを当てることです。次のコードでは、Enter キーが押されたときにバーコードを書き込み、製品を検索することができ、うまく機能します。しかし、13 桁未満のバーコードを入力した場合、または入力したバーコードがデータベースに存在しない場合は、ユーザーにトーストを表示して、そのことを知らせたいと思います。Toast を表示した後、EditText が再び自動的にフォーカスされるようにして、ユーザーがバーコードをもう一度入力できるようにします。トーストを表示した後、 requestFocus() メソッドを試しましたが、うまくいきませんでした。ソフト キーボードは常に表示されますが、トーストの後、EditText に触れない限り、EditText を再度入力することはできません。これどうやってするの?

    final EditText procura_codbar = (EditText)
                findViewById(R.id.procurar_produto_codbar);
    procura_codbar.setOnKeyListener(new View.OnKeyListener() {

        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {

            if ((event.getAction() == KeyEvent.ACTION_DOWN)
                    && (keyCode == KeyEvent.KEYCODE_ENTER)) {

                String codbar = procura_codbar.getText().toString();
                if (codbar.length()<13){   
                    Toast.makeText(MainActivity.this,
                           "type a 13 digit barcode",
                           Toast.LENGTH_LONG).show();
                }
                else{
                    if (bdh!=null){
                        bdh.closedb(); bdh.close();
                    }
                    bdh = new DBHelper(MainActivity.this);
                    Log.i("CODBAR", codbar);
                    produto prod_ = bdh.getProduto(codbar);
                    if (prod_!=null){
                        showDialogPreco(prod_);
                        procura_codbar.setText("");
                    }else{
                        Toast.makeText(MainActivity.this,
                                                     "Product not found",
                                                     Toast.LENGTH_SHORT).show();
                        procura_codbar.setSelection(codbar.length());
                    }
                }
                procura_codbar.requestFocus();
                procura_codbar.setSelection(codbar.length());
            }

            return false;
        }
    });

XML は次のとおりです。

<EditText
    android:id="@+id/procurar_produto_codbar"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:inputType="textNoSuggestions|number"
    android:textSize="22sp"
    android:maxLength="13"
    android:layout_toRightOf="@+id/tv_procura_codbar" >

    <requestFocus />
</EditText>

前もって感謝します。

編集:これをいじって、問題を見つけました。解決策は次のとおりです。

return true;

今それは動作します...

4

2 に答える 2

3

トースト メッセージのすぐ隣にこのコードを挿入します。

Toast.makeText(MainActivity.this,
                       "type a 13 digit barcode",
                       Toast.LENGTH_LONG).show();

procura_codbar.setFocusableInTouchMode(true);
procura_codbar.setFocusable(true);
procura_codbar.requestFocus();
procura_codbar.setSelection(codbar.length());

これは私にとってはうまくいきました。また、コードの下部にある*procura_codbar.requestFocus();*を削除する必要があります。

于 2012-08-06T12:27:27.110 に答える