14

No puedo entender por qué findViewById devuelve el elemento equivocado, aquí es la clase:findViewById vuelve a generar el elemento incorrecto?

public class EventDetailsFragment extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);   
     setContentView(R.layout.event_details); 
     Log.d("First", findViewById(R.id.tuxtView1).getClass().toString()); 
     Log.d("Second", findViewById(R.id.tuxtView2).getClass().toString()); 
     Log.d("Third", findViewById(R.id.imageView1).getClass().toString()); 
    } 
} 

Y aquí es el xml:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/green" 
android:orientation="horizontal" 
android:paddingLeft="10dp" 
android:paddingRight="10dp" 
android:paddingTop="10dp"> 

    <RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="0dp" 
    android:layout_height="175dp" 
    android:layout_gravity="center_horizontal" 
    android:layout_weight="1" 
    android:background="#fff" 
    android:gravity="right" > 

     <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="110dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:src="@drawable/ic_event_image" /> 

     <TextView 
     android:id="@+id/tuxtView2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="10dp" />  
     <TextView 
     android:id="@+id/tuxtView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/tuxtView2" 
     android:layout_toRightOf="@+id/imageView1" 
     android:textColor="#555" 
     android:textSize="20dp" /> 

    </RelativeLayout> 

</LinearLayout> 

que la salida es Logcat:

12-26 23:43:20.249: D/First(6789): class android.widget.TextView 
12-26 23:43:20.249: D/Second(6789): class android.widget.ImageView 
12-26 23:43:20.249: D/Third(6789): class android.widget.TextView 

Así que el punto es, ¿por qué obtengo una vista de imagen con id R.id.tuxtView2 y una vista de texto con id R.id.imageView1. La aplicación falla si deseo asignar un valor de texto a R.id.tuxtView2, como un TextView.

+2

Intente volver a cargar su proyecto, tal vez algo malo con R.java, o verifique que está llamando al buen archivo con setContentView. –

+0

Pregunta bien documentada. Lo siento, no tengo idea de por qué sucede esto. –

+0

@JeremyD, wow, lo intenté todo, durante un par de horas, excepto para reiniciar el eclipse. Reinicié eclipse y de repente funcionó de nuevo. Pensé que estaba haciendo algo mal en mi código. Publique eso como una respuesta y lo votaré + lo marcará como resuelto. ¡Gracias! – jonepatr

Respuesta

21

intenta volver a cargar el proyecto, tal vez algo malo con R.java, o compruebe si lo está llamando el archivo con buena setContentView.

Al actualizar/limpiar su proyecto, el archivo R.java se volverá a cargar y encontrará los widgets nombrados.

+2

Me basaré en esta respuesta ya que está en lo correcto, pero agregaré que para mí, eliminar el contenido de la carpeta my/gen era la única manera de resolver un problema muy similar. – jiggy

+2

¡Gracias! Da mucho miedo cuando el código de Google afirma que "1 == 2";) – Adam

+1

NB: no haga lo que hice y elimine su carpeta/gen - tenga cuidado de borrar solo los CONTENIDOS de la misma. Si eliminas todo, se rompe temporalmente el ADT (pero recibes un error que te dice cómo solucionarlo, lo cual está bien), pero rompe permanentemente el SVN (si estás usando SVN). Ugh. La única solución es "revertir" la carpeta en SVN. – Adam

2

He copiado tu código e hice una aplicación ficticia. Tengo estos resultados:

12-27 00:03:48.332: D/First(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Second(9165): class android.widget.TextView 
12-27 00:03:48.332: D/Third(9165): class android.widget.ImageView 

Al parecer, no hay nada malo con el código

+0

Gracias, probé todo excepto reiniciar eclipse, que resultó ser la fuente del problema. Gracias por tomarse su tiempo:) – jonepatr

+0

No hay problema. La próxima vez podría intentar hacer clic derecho en su proyecto y seleccionar Herramientas Android-> Reparar propiedades del proyecto O ir a la barra de herramientas de Eclipse Proyecto-> Limpiar proyecto – RonzyFonzy

0

He intentado casi todo aquí, pero nada funcionó hasta que agregué un nuevo componente a la actividad y, después de ejecutarlo, noté que el nuevo componente no se mostraba. Sugirió que mi aplicación no se actualizaba con las ejecuciones. Funcionó al desinstalar manualmente la versión anterior de la aplicación y luego ejecutarla nuevamente.

Cuestiones relacionadas