Android Input Dialog Возвращает входное значение - PullRequest
7 голосов
/ 13 февраля 2011

Я тяну волосы за это.

У меня есть приложение, которое, когда вы нажимаете на элемент меню, отображает диалоговое окно с предупреждением о входе.Когда пользователь нажимает «ОК», тогда текст, который он ввел в EditText в диалоговом окне, хочет вернуть, чтобы использовать его позже в упражнении.

Поэтому я подумал:

name = input.getText().toString(); //input is an EditView which is the setView() of the dialog

Внутри onClick кнопки «ОК» будет работать, но это не так.Eclipse говорит мне, что я не могу установить имя внутри onClick, потому что оно не является окончательным, но если я изменю определение имени на final, оно не может быть явно изменено и поэтому не может быть установлено внутри onClick ().

Вот полный код этого бита:

String routeName = "";

        AlertDialog.Builder alert = new AlertDialog.Builder(this);  

        alert.setTitle("Title");  
        alert.setMessage("Message");  

        // Set an EditText view to get user input   
        final EditText inputName = new EditText(this);  
        alert.setView(inputName);  

        alert.setPositiveButton("Set Route Name", new DialogInterface.OnClickListener() {  
        public void onClick(DialogInterface dialog, int whichButton) {  
            routeName = inputName.getText().toString();  
          }  
        }); 

        alert.show();

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

Может ли кто-нибудь, пожалуйста, просветить меня?

Спасибо за ваше время,

InfinitiFizz

Ответы [ 2 ]

3 голосов
/ 13 февраля 2011

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

yourButton.setOnClickListener(new View.OnClickListener() {
        public boolean onClick(View v) {
               name = findViewById(R.id.yourInputId)).getText().toString();
               return true;
        }
);

Вы также можете использовать аргумент v, например, вызвав v.getContext() в своем слушателе.

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

Вы можете сделать routerName переменной-членом.

...