0

以下は私のEditTextであり、文字列telを入力したいと思います。ToastはgetText toStringを表示することに成功しますが、LogCatでtelに入力された値が表示されませんでした。

     edittext = (EditText) findViewById(R.id.editTel);
     edittext.setOnEditorActionListener(new OnEditorActionListener() {  
         @Override  
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
            Toast.makeText(Reserve.this, edittext.getText().toString(), Toast.LENGTH_SHORT).show();  
            tel = edittext.getText().toString();
             return true;  
         }  
     });

     Log.d("TEL", "The tel is: "+tel);
4

2 に答える 2

3

メソッドLog.d("TEL", "The tel is: "+tel);内に次のように配置します。onEditorAction

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
Toast.makeText(Reserve.this, edittext.getText().toString(),
                                 Toast.LENGTH_SHORT).show();
tel = edittext.getText().toString(); 
Log.d("TEL", "The tel is: "+tel);
return true;
}
});

おそらく可能な制御が外部に到達していないため OnEditorActionListener

于 2012-12-12T19:06:12.747 に答える
1

EditText オブジェクト内の (OnEditorActionListener クラスの) オブジェクトへの参照を格納するメソッドを呼び出すだけです。フローはすぐに Log.d() メソッドを実行し、印刷して「tel」を空にします。OnEditorActionListener.onEditorAction() メソッドは、ユーザーのアクションによってトリガーされ、それ以外のときにいつでも呼び出され、その中のコードを実行します。たぶん、フローは次のように書くとより明確になる可能性があります。


OnEditorActionListener listener = new OnEditorActionListener() {  
         @Override  
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
            Toast.makeText(Reserve.this, edittext.getText().toString(), Toast.LENGTH_SHORT).show();  
            tel = edittext.getText().toString();
             return true;  
         }  
     });

edittext = (EditText) findViewById(R.id.editTel);
edittext.setOnEditorActionListener(listener);
Log.d("TEL", "The tel is: "+tel);

この方法により、onEditorAction() メソッドがそのコード片の通常の実行フローから完全に独立していることがより明確になります。

于 2012-12-12T21:20:24.363 に答える