Почему мой ресурс EditText оценивается как ноль в моем приложении для Android? - PullRequest
1 голос
/ 29 ноября 2011

Итак, у меня есть диалоговое окно, которое означает принятие имени пользователя и пароля, но когда я пытаюсь получить имя пользователя и пароль от объекта EditText, я не могу получить объект EditText отресурсы, мой код выглядит следующим образом.

protected Dialog onCreateDialog(int ID){
     LayoutInflater factory = LayoutInflater.from(this);
     final View textEntryView = factory.inflate(R.layout.login_dialogue, null);
     return new AlertDialog.Builder(this)
         .setTitle("Login:")
         .setView(textEntryView)
         .setPositiveButton("login", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int whichButton) {
                 /* Problem occurs below */
                 View aView = findViewById(R.id.login_dialogue_username);
                 String username = ((EditText) aView).getText().toString();
                 String password = ((TextView) findViewById(R.id.login_dialogue_password)).getText().toString();
                 boolean success = attemptLogin(username, password);
             }
         })
         .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int whichButton) {

                 /* User clicked cancel so do some stuff */
             }
         })
         .create();
 }

Поэтому, когда я перехожу к отладке, переменная aView равна нулю, но я не понимаю, почему.Ресурс находится в моем файле R и в затмении он окрашен в синий цвет, что указывает на то, что он соответствует имени в файле R.Кто-нибудь знает, что здесь происходит?

Ответы [ 3 ]

5 голосов
/ 29 ноября 2011

Вы смотрите в макете деятельности. Попробуйте использовать

textEntryView.findViewById(R.id.login_dialogue_username);

вместо.

2 голосов
/ 29 ноября 2011

Я собираюсь выйти на конечность и предположить, что интересующий вас EditText (R.id.login_dialogue_username) находится внутри иерархии макетов, накаченной с R.layout.login_dialogue, а не в представлении содержимого всей операции.

Если это так, вам нужно использовать textEntryView.findViewById(R.id.login_dialogue_username), чтобы найти нужный вам вид.

0 голосов
/ 29 ноября 2011

Вы пытались очистить и перекомпилировать свой проект?

Это иногда случалось со мной, и кажется, что при определенных условиях Android портит идентификаторы в классе R.очистка и перекомпиляция вашего проекта восстановит класс R.

...