Доступ к данным программы из внутреннего класса onClick () - PullRequest
0 голосов
/ 07 февраля 2011

Я пытаюсь получить доступ к EditText из метода onClick () в реализации onClickListener для кнопки. вот код:

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:

Внутри OnClickListener Я не могу получить доступ ко многим вещам - как подойти?

но это не решает проблему. я упускаю что-то, что мне нужно, чтобы ссылаться на эти элементы внутри этого внутреннего класса, или, возможно, мой синтаксис немного искажен. любая помощь приветствуется.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Вы неправильно сравниваете 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)) {
2 голосов
/ 07 февраля 2011

Во-первых, вызывается ли ваш метод onClick? Во-вторых, не используйте == для сравнения строк; используйте .equals(). (Строки, которые равны, не обязательно являются одним и тем же объектом, что == тестирует.)

...