2011-02-13 13 views
7

Estoy tirando de mi pelo sobre este.Diálogo de entrada de Android Valor de entrada de retorno

Tengo una aplicación que cuando presiona un elemento de menú, quiero que muestre un diálogo de alerta de entrada. Cuando el usuario toca "Aceptar", el texto que ha ingresado en EditText en el cuadro de diálogo quiere ser devuelto para ser utilizado más adelante en la actividad.

Así que pensé poner:

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

Dentro del onClick del botón "OK" iba a funcionar pero no es así. Eclipse me dice que no puedo establecer el nombre dentro de onClick porque no es definitivo, pero si cambio la definición del nombre a final, no se puede cambiar obviamente y, por lo tanto, no se puede establecer dentro de onClick().

Aquí está el código completo para este bit:

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(); 

debo estar haciendo algo realmente estúpido aquí porque Googled alrededor de las edades y encontré que nadie más con el mismo problema.

¿Alguien puede por favor iluminarme?

Gracias por su tiempo,

InfinitiFizz

+0

¡Publique un código más! – user432209

+0

¡Lo siento! Actualizó la pregunta principal con el código ahora. –

Respuesta

3

De hecho, no se puede conseguir simplemente anythingy dentro de su onlcick, que es una función anónima supongo. Lo que puedes hacer es obtener el contexto y encontrar tus puntos de vista desde allí. Se vería algo como esto:

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

También puede utilizar el argumento v, por instace llamando v.getContext() en su oyente.

+0

Gracias por la respuesta Nanne, pero ¿dónde definiría "yourButton"? ¿Es ese el botón "Ok"? Porque parece que AlertDialog tiene un método setPositiveButton() específico para crear ese botón. ¿Quiere decir que podría crear una vista personalizada para una versión personalizada del diálogo con un botón definido en esa vista y tener suButton findViewById ese botón? Lo siento, todavía soy bastante nuevo en el desarrollo de Android adecuado. –

+0

No vi la adición a la pregunta, pero en este caso solo fue un ejemplo, para tener algo que mostrar. Simplemente podría ignorar esa primera parte y leer de la parte "setOnclickListener";) – Nanne

+0

Empecé a hacer esto, pero aún no sabía cómo sacar la variable de nombre de setOnClickListener y, para resolver este problema, puse todo lo que se quería decir para venir como resultado del diálogo en una función y esa función se llama dentro del onPositive() oyente. –

2

Puede hacer que routerName sea una variable miembro.

+0

Woah! ¡Eso fue simple! Gracias foobaa, pero ¿sería más agradable/más limpio hacer funcionar a @Nanne usando findViewById, etc.? –

+0

Bien, el problema con este método fue que el resto del código se ejecutó mientras el usuario estaba escribiendo la entrada, ya que los diálogos son asincrónicos. Mi solución fue hacer lo que le contesté a Nanne. –

Cuestiones relacionadas