Foros del Web » Programando para Internet » Android »

Recoger textos de un DIALOG_TEXT_ENTRY

Estas en el tema de Recoger textos de un DIALOG_TEXT_ENTRY en el foro de Android en Foros del Web. Hola: El juego que estoy programando empieza con una primera pantalla de portada con una imagen introductoria y un botón de Acceso. Al pulsar en ...
  #1 (permalink)  
Antiguo 17/12/2011, 18:32
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 7 meses
Puntos: 3
Recoger textos de un DIALOG_TEXT_ENTRY

Hola:

El juego que estoy programando empieza con una primera pantalla de portada con una imagen introductoria y un botón de Acceso.

Al pulsar en el botón, se muestra una ventana de diálogo para insertar un nombre de usuario y su contraseña. Todo para iniciar sesión y así entrar en el juego y poder jugar una partida.

La ventana de diálogo es de tipo de entrada de datos (DIALOG_TEXT_ENTRY), pero no llego a capturar el texto de las cajas pues al pulsar en el botón de OK, me sale el mensaje de [Forzar cierre]. Lo programado en el click de Cancelar si va bien.
Pero lo que me importa es como hacer para recoger los datos insertados en las dos cajas de texto.

A continuación, pongo los códigos de los archivos empleados.

Estilos [styles.xml]
Código:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <!-- ====== ESTILOS ACCESO :: INI =========================== -->

    <style name="sty_LayoutAcceso">
	    <item name="android:layout_width">fill_parent</item>
	    <item name="android:layout_height">fill_parent</item>
	    <item name="android:orientation">vertical</item>
	    <item name="android:gravity">center</item>
	    <item name="android:background">#ff0099ff</item>
	</style>

    <style name="sty_ElmntosAcceso">
	    <item name="android:layout_width">wrap_content</item>
	    <item name="android:layout_height">wrap_content</item>
	</style>

    <!-- ====== ESTILOS ACCESO :: FIN =========================== -->

</resources>

Textos [strings.xml]
Código:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">_VocaRuletario</string>
    <string name="str_btnAcceso">Acceso</string>
    <string name="str_etiqNivel">NIVEL:</string>
    <string name="str_etiqPtos">PUNTOS:</string>
    <string name="str_etiqPista">PISTA:</string>
    <string name="str_btnRuleta">Ruleta</string>
    <string name="str_btnJugar">Jugar</string>
    <string name="str_btnContinuar">Has Acertado!! Continuar?</string>
    <string name="str_btnProponer">Proponer</string>
    <string name="str_btnSolucion">Solución</string>

    <!-- ============================== -->
    <!--  Ventana Dialog Textos			-->
    <!-- ============================== -->
    <string name="alert_dialog_text_entry">Inicia Sesión</string>
    <string name="alert_dialog_username">Usuario:</string>
    <string name="alert_dialog_password">Contraseña:</string>
    <string name="alert_dialog_ok">O.K.</string>
    <string name="alert_dialog_cancel">Cancelar</string>
</resources>
XML principal [main_acceso.xml]
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/sty_LayoutAcceso">

    <ImageView
        android:id="@+id/imgPortada"
        style="@style/sty_ElmntosAcceso"
        android:src="@drawable/ic_portada" />

    <Button
        android:id="@+id/btnAcceso"
        style="@style/sty_ElmntosAcceso"
        android:text="@string/str_btnAcceso" />

</LinearLayout>
XML ventana de datos de acceso [alert_dialog_text_entry.xml]
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView 
        android:id="@+id/username_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_username"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/nomUsuario"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/passUsuario"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_password"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/password_edit"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:password="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />
        
</LinearLayout>
Clase Actividad [AccesoActividad.java]
Código:
package com.android;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class AccesoActividad extends Activity implements OnClickListener {
	// Atributos a asignar a un control del Interfaz
	private Button elBtnAcceso;
    private static final int DIALOG_TEXT_ENTRY = 7;
	private EditText laCajaNomUsu, laCajaPassUsu;
	private String nomUsuAcceso, passUsuAcceso;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_acceso);

    	// Asignando Atributos a su correspondiente Control del Interfaz
        asignacionControles();
    } // onCreate()
	
	private void asignacionControles() {
		// Asignando Atributos a su correspondiente Control del Interfaz
		elBtnAcceso		= (Button)findViewById(R.id.btnAcceso);
		elBtnAcceso.setOnClickListener(this);

		elBtnAcceso.requestFocus();
	}

	protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DIALOG_TEXT_ENTRY:
            // This example shows how to add a custom layout to an AlertDialog
            LayoutInflater factory = LayoutInflater.from(this);
            final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);

            return new AlertDialog.Builder(AccesoActividad.this)
            .setIcon(R.drawable.alert_dialog_icon)
            .setTitle(R.string.alert_dialog_text_entry)
            .setView(textEntryView)
            .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                	laCajaNomUsu	= (EditText)textEntryView.findViewById(R.id.nomUsuario);
            		laCajaPassUsu	= (EditText)textEntryView.findViewById(R.id.passUsuario);
                	// Usuario ha pulsado OK 
                	try {
                    	nomUsuAcceso	= laCajaNomUsu.getText().toString();
                    	passUsuAcceso	= laCajaPassUsu.getText().toString();
						// Prueba de que llegan y se recogen los datos
						mostrarMensaje("\nUsuario dado: [" + nomUsuAcceso + "]\nContraseña dada: [" + passUsuAcceso + "]");
						
					} catch (Exception e) {
						// TODO: handle exception
						String mensaje = e.getMessage();
						mostrarMensaje("ERROR: " + mensaje);
					}

                }
            })
            .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    // Usuario ha pulsado Cancelar 
                	String txtCancelar = "Si no se inicia sesión, no se puede acceder al juego";
                    mostrarMensaje(txtCancelar);
                }
            })
            .create();
        }
        return null;
    }
    
    public void mostrarMensaje(String mensaje) {
    	Toast.makeText(this, mensaje, Toast.LENGTH_LONG).show();
    }

    public void onClick(View boton) {
		
		switch (boton.getId()) {
			case R.id.btnAcceso:
				//ShowIniciarSesion();
				showDialog(DIALOG_TEXT_ENTRY);
				
/*				// Validar Acceso
				Acceso elAcceso = new Acceso();
				boolean accesoOK = elAcceso.verificarAcceso(nomUsuAcceso, passUsuAcceso);
				String mensAcceso = "";
				if (accesoOK) {
					mensAcceso += "Usuario: " + nomUsuAcceso;
					mensAcceso += "\nContraseña: " + passUsuAcceso;
					mostrarMensaje(mensAcceso);
					Intent i = new Intent(this, DroidVocabularioActivity.class);
					startActivity(i);
				}
				else {
					mensAcceso = "Los datos de Acceso no son correctos";
					mostrarMensaje(mensAcceso);
				}*/
		}
		
	}

}

Espero que alguien responda y me pueda ayudar. He buscado por internet pero todo lo que pruebo, me sigue fallando. Y a veces, lo que encuentro es lo mismo que lo que yo he puesto. Pero a mi me falla.
__________________
Saludos,

zacktagnan.
=================================================
  #2 (permalink)  
Antiguo 19/12/2011, 04:44
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 7 meses
Puntos: 3
Respuesta: Recoger textos de un DIALOG_TEXT_ENTRY

Bueno, visto que nadie responde, me respondo yo mismo.

Cuando ya me estaba dando por vencido y estaba creando una actividad nueva para sacar la pantalla de inicio de sesión, he terminado viendo los errores que hacían que me saliera la ventana de error de Forzar cierre de Android

Los errores estaban en la confusión de atribución de IDs en el main_acceso.xml

Dentro de AccesoActividad.java asigno variables a ciertos controles del xml.

Código:
 	laCajaNomUsu	= (EditText)textEntryView.findViewById(R.id.nomUsuario);
	laCajaPassUsu	= (EditText)textEntryView.findViewById(R.id.passUsuario);
Erróneamente, en el XML mencionado, puse como ID [passUsuario] a la etiqueta TextView referente al EditText en el que insertar ese dato, en vez de al propio EditText.

XML ventana de datos de acceso [alert_dialog_text_entry.xml] [CON ERRORES]
Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView 
        android:id="@+id/username_view"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_username"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/nomUsuario"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/passUsuario"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_password"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/password_edit"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:password="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />
        
</LinearLayout>
XML ventana de datos de acceso [alert_dialog_text_entry.xml] [CORREGIDO]
(corregido el ID adecuado y adecuando los demás)

Código:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView 
        android:id="@+id/nomUsuarioTxt"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_username"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/nomUsuario"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <TextView
        android:id="@+id/passUsuarioTxt"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:text="@string/alert_dialog_password"
        android:gravity="left"
        android:textAppearance="?android:attr/textAppearanceMedium" />
            
    <EditText
        android:id="@+id/passUsuario"
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:layout_marginLeft="20dip"
        android:layout_marginRight="20dip"
        android:scrollHorizontally="true"
        android:autoText="false"
        android:capitalize="none"
        android:gravity="fill_horizontal"
        android:password="true"
        android:textAppearance="?android:attr/textAppearanceMedium" />
        
</LinearLayout>
Así que ya está, ahora solamente quedaría mandar los datos adónde fuera necesario. Y tal y tal...

Para el que le pueda servir, aquí ya dispone de un ejemplo de Dialog para capturar textos introducidos por el usuario.
__________________
Saludos,

zacktagnan.
=================================================
  #3 (permalink)  
Antiguo 14/12/2012, 09:48
 
Fecha de Ingreso: julio-2012
Mensajes: 3
Antigüedad: 12 años, 4 meses
Puntos: 1
Respuesta: Recoger textos de un DIALOG_TEXT_ENTRY

Muchas gracias!

Etiquetas: pantalla, recoger, textos, todo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:52.