我正在尝试从按钮的onClickListener实现中的onClick()方法访问EditText。这是代码:
transmit.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//data validation
///////////////////////
boolean valid = true;
if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") {
TX_FAIL_TEXT = "Missing Driver ID!";
showDialog(DIALOG_FAIL);
TX_FAIL_TEXT = "Transmission Failed!"; //reset the dialog fail text to default
valid = false;
}
Log.e("smsDRVERR",((EditText)findViewById(R.id.drv_in)).getText().toString());
//begin transmission
///////////////////////
if(valid) {
showDialog(DIALOG_TX_PROGRESS);
Thread t = new Thread(txRunnable);
t.start();
} else {
//do things if needed
}
}
});
永远不会调用Log.e(不会出现在logcat中)。并且程序执行就像条件语句不存在一样。如何在onClick实现中正确引用布局项?我也尝试过以下一行:
Log.e("smsDRVERR",((EditText)smsActivity.this.findViewById(R.id.drv_in)).getText().toString());
在我在SO上找到的这个问题中提到了
Inside OnClickListener I cannot access a lot of things - how to approach?
但它没有解决问题。我错过了一些我需要在这个内部类中引用这些项目的东西,或者我的语法有点不足。任何帮助表示赞赏。
答案 0 :(得分:2)
首先,你的onClick方法被调用了吗?其次,不要使用==
进行字符串比较;使用.equals()
。 (相同的字符串不一定是同一个对象,这是==
测试的。)
答案 1 :(得分:2)
您没有正确比较String
。
if(((EditText)findViewById(R.id.drv_in)).getText().toString() == "") {
正在检查对象是否相等,而您想要检查值是否相等。你应该使用:
if(((EditText)findViewById(R.id.drv_in)).getText().toString().equals("")) {
就个人而言,我会将getText
返回的值分配给String
变量,而不是多次调用getText
:
String myEditTextValue = (EditText)findViewById(R.id.drv_in)).getText().toString();
...
if ("".equals(myEditTextValue)) {