从onClick()内部类中访问程序数据

时间:2011-02-07 17:45:55

标签: java android events onclick

我正在尝试从按钮的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?

但它没有解决问题。我错过了一些我需要在这个内部类中引用这些项目的东西,或者我的语法有点不足。任何帮助表示赞赏。

2 个答案:

答案 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)) {