Mi aplicación se detiene con el error “android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.EditText”

publicado por: Anonymous

Al ejecutar mi aplicación mediante el simulador, se detiene automáticamente sin terminar de ejecutarse. Entre todos los errores pone que se debe a esto :

java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.EditText

Adjunto el código java de ambas pantalla:

Main:

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

private EditText texto;
private Button boton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Tener acceso y referencia a los controles del programa

    texto = (EditText) findViewById(R.id.texto);
    boton = (Button) findViewById(R.id.boton);

    //comienza la funcion onClick

    boton.setOnClickListener(new View.OnClickListener(){

    @Override
    public void onClick(View v){

        // creamos el intent
        Intent intent=
                new Intent(MainActivity.this, SaludoActivity.class);

        //La comunicacione entre actividades

        Bundle b =new Bundle();
        //añadimos un dato de tipo String mediante el método putString(clave, valor)
        b.putString("NOMBRE", texto.getText().toString());

        //añadimos el intent

        intent.putExtras(b);

        //iniciamos actividad

        startActivity(intent);

    }
    } );
}
}

Segunda pantalla:

package soto.javi.prueba1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SaludoActivity extends AppCompatActivity {

private TextView mostrar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_saludo);

    mostrar= (TextView)findViewById(R.id.mostrar);

    //Recuperamos la información pasada en el intent

    Bundle bundle= this.getIntent().getExtras();

    //construimos el mensaje que se va a mostrar

    mostrar.setText("Hola" + bundle.getString("NOMBRE"));


}
}

Y los xml de ambos:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="soto.javi.prueba1.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/descripcion"
        android:textSize="24sp"
        android:id="@+id/texto" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:text=""
        android:ems="10"
        android:id="@+id/nombre"
        android:layout_marginTop="90dp"
        android:textSize="24sp"
        android:layout_below="@+id/texto"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/boton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/boton"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>

activity_saludo.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_saludo"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="soto.javi.prueba1.SaludoActivity">

    <TextView
        android:text=""
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="194dp"
        android:id="@+id/mostrar"
        tools:textSize="24sp" />
</RelativeLayout>

solución

Realmente le estás intentando asignar a tu EditText un id que no existe. En tu caso, le tendrías que asignar el id nombre:

texto = (EditText) findViewById(R.id.nombre);

Como veo que ha habido malentendidos, cuando pongo un id que no existe me refiero a un id que no existe para ese EditText.

Para dejar totalmente completa mi respuesta voy a hacer referencia al porque da ese error. En realidad, es porque has utilizado un id de un TextView al intentar a hacer la referencia a tu EditText, con lo cual te salta el error como que no puede hacer dicha referencia.

Esto se puede deducir del error (he recalcado lo importante):

java.lang.ClassCastException: android.support.v7.widget.AppCompatTextView cannot be cast to android.widget.EditText

Cuando habla de casteo (cast) se refiere a que un valor que está definido con un tipo se puede usar como otro. Sin embargo, tenemos que estar seguros de que el valor que casteamos sea compatible con el tipo de elemento al que queremos castear. En caso contrario, el cast será erróneo y nos dará un error muy similar al anterior (dependiendo de los tipos de datos que estemos intentando castear).

Es decir, cuando usas findViewById(R.id.texto); realmente lo que estás haciendo es buscar una vista con ese ID. Recupera esa vista (la cual es un TextView) y la intenta convertir a EditText, por lo tanto, la vista que recuperamos no corresponde con el cast que le queremos asignar.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *