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 回答