【发布时间】:2011-02-08 02:02:22
【问题描述】:
我正在尝试从按钮的 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?
但这并不能解决问题。我遗漏了一些我需要在这个内部类中引用这些项目的东西,或者我的语法有点混乱。任何帮助表示赞赏。
【问题讨论】:
-
你的日志语句超出了条件;它应该无条件地记录代码。您的日志记录或您的查看方式有问题。尝试一个简单的 Log.e("a", "b");在方法的最开始;一旦它开始工作,您就可以诊断出还有什么问题。
-
日志语句不是问题,它适用于不同的数据。这是我在发布之前使用的测试,以确保我可以规避这样的回应......
-
在你上面“写Log.e没有被调用”。现在你说“日志语句没问题”。请提供准确的信息并尽量减少代码以重现您的问题。
-
换句话说,如果我将 Log 语句更改为: Log.e("A", "B");如上所述,日志完全按照它应该显示在 logcat 中。但是,使用上面的函数调用,程序的行为就好像从未调用过 Log。没有错误,logcat 中根本不显示日志记录。
标签: java android events onclick