Android - Problema con un boton

 
Vista:
Imágen de perfil de Charly
Val: 123
Bronce
Ha disminuido su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por Charly (69 intervenciones) el 10/10/2016 16:50:00
Hola, estoy haciendo una aplicación básica con un EditText para escribir un nombre, un CheckBox para decir si eres socio y un botón para que diga "Bienvenido "+txtNombre si es el CheckBox está activado y que cambie el color del EditText si no lo es.
Pues bien, el código no me da ningún error, pero al ejecutarlo en el movil la aplicacion se me cierra y me dice que la aplicación se ha detenido.
En la ventana de RUN, me aparece el siguiente error:
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.CheckBox
at charly.izquierdofp.es.curso.CheckBoxActivity$1.onClick(CheckBoxActivity.java:34)
at android.view.View.performClick(View.java:4101)
at android.view.View$PerformClick.run(View.java:17082)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4940)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)
Además, la colocación y la forma del botón no se modificarlos.
A continuación pongo el código que he escrito:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class CheckBoxActivity extends AppCompatActivity {
 
    CheckBox ChkSocio;
    EditText txtNombre;
    Button BtnSocio;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_checkbox);
        txtNombre=(EditText)findViewById(R.id.txtNombre);
        addListenerOnButton();
    }
    public void Si(View view) {
        if (ChkSocio.isChecked()) {
            Toast.makeText(this,"Bienvenido "+txtNombre,Toast.LENGTH_LONG).show();
        }
    }
    public void addListenerOnButton() {
        ChkSocio= (CheckBox) findViewById(R.id.ChkSocio);
        BtnSocio = (Button) findViewById(R.id.BtnSocio);
        BtnSocio.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            boolean isChecked = ((CheckBox)view).isChecked();
            if (isChecked) {
                Si(view);
            } else {
                txtNombre.setBackgroundColor(9);
            }
        }
        });
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 613
Oro
Ha aumentado su posición en 196 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por juanki (251 intervenciones) el 10/10/2016 17:27:50
Hola

Aquí tienes el error:
java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.CheckBox

Te está diciendo que no puede convertir el botón en checkbox. Imagino que el error viene de la línea:
boolean isChecked = ((CheckBox)view).isChecked(); dentro del método public void onClick(View view) y es que ese parámetro view hace referencia al botón que has pulsado, por lo tanto no puedes convertirlo a ChackBox.

Y no sé por qué pones esa línea, si unas líneas antes ya tienes la referencia al checkbox:
ChkSocio= (CheckBox) findViewById(R.id.ChkSocio);

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha disminuido su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por Charly (69 intervenciones) el 10/10/2016 21:33:56
Hola Juanki.
El problema es que el Toast no me deja ponerlodentro del isChecked, en el método del addListenerOnButton, y por eso tengo que hacer el método Si.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 613
Oro
Ha aumentado su posición en 196 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por juanki (251 intervenciones) el 10/10/2016 22:59:20
A ver si me explico mejor....

El error lo tienes en la línea 24, que tratas de hacer un cast de un View (Que es el botón que pulsaste) a un CheckBox. Y claro, da error.

Pero en la línea 19 ya obtienes una referencia al CheckBox. ¿Por qué no usas esa referencia?

1
2
3
4
5
6
7
8
9
10
public void onClick(View view) {
 
            boolean isChecked = ChkSocio.isChecked(); // aquí tienes que usar la referencia que obtuviste antes, en la línea 19
 
            if (isChecked) {
                Si(view);
            } else {
                txtNombre.setBackgroundColor(9);
            }
        }

Y ya puestos puedes ahorrarte esa variable booleana:

1
2
3
4
5
if (ChkSocio.isChecked()) {
    Si(view);
} else {
    txtNombre.setBackgroundColor(9);
}

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha disminuido su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por Charly (69 intervenciones) el 11/10/2016 13:04:33
Gracias Juanki.
He quitado esa línea y ya me funciona, pero detrás de Bienvenido, en vez de salirme el nombre del txtNombre, me aparece: android.support.v7.widget.AppCompatEditText@41691a40.
Y en el else, donde le digo lo que tiene que hacer si no marco el CheckBox, no me hace nada.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 613
Oro
Ha aumentado su posición en 196 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por juanki (251 intervenciones) el 11/10/2016 15:23:15
Hola

Normal que te muestre eso, la línea que muestra el Toast es esta:
Toast.makeText(this,"Bienvenido "+txtNombre,Toast.LENGTH_LONG).show();

Ahí le estás pasando al Toast txtNombre, que es la referencia al EditText, pero tú lo que necesitas es obtener el contenido del EditText, lo que el usuario ha tecleado.

Te lo dejo como ejercicio :)

Y en cuanto al otro problema te refieres a txtNombre.setBackgroundColor(9); ¿Eso es lo que no te funciona? ¿Qué es 9?

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha disminuido su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por Charly (69 intervenciones) el 11/10/2016 15:55:02
Hola Juanki.
El 9 era el número de un color, porque al escribir el setBackgroudColor, lo que pide es un int, pero he descubierto que también se puede poner Color.BLUE.
Respecto a los deberes que me has puesto ya los he hecho:
String dato = txtNombre.getText().toString();
Toast.makeText(this,"Bienvenido "+dato,Toast.LENGTH_LONG).show();
Ahora solo me falta poner un botón normal y corriente, ya que me sale vertical y muy largo y lo que quiero es horizontal y más corto.
Te paso el código del botón:
1
2
3
4
5
6
7
8
9
10
11
<Button android:id="@+id/BtnSocio"
        android:text="VALIDAR"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:onClick="Validar"
        android:orientation="horizontal"
        android:layout_marginLeft="35dp"
        android:layout_marginStart="35dp"
        android:layout_below="@+id/txtNombre"
        android:layout_toRightOf="@+id/ChkSocio"
        android:layout_toEndOf="@+id/ChkSocio" />
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 613
Oro
Ha aumentado su posición en 196 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por juanki (251 intervenciones) el 11/10/2016 19:39:32
Hola

Pues imagino que el problema está en la línea:
android:layout_height="match_parent"

match_parent quiere decir que se adapte al tamaño del padre, tendrás que cambiarlo por wrap_content, que quiere decir que se adapte a su contenido, en cambio si pones match_parent en el width sí te saldrá alargado a lo ancho.

Te recomiendo que te mires algún libro o manual, esto es bastante básico.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Charly
Val: 123
Bronce
Ha disminuido su posición en 2 puestos en Android (en relación al último mes)
Gráfica de Android

Problema con un boton

Publicado por Charly (69 intervenciones) el 11/10/2016 20:38:46
Muchas gracias Juan.
Ya lo tengo terminado completamente.
Perdona si he sido muy pesado o novato por preguntarte tantas cosas básicas, pero que al estar empezando, no sabía.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar