14

Nie mogę zrozumieć, dlaczego findViewById zwraca niewłaściwy element, tutaj jest klasa:findViewById przywraca zły element?

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

A oto 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> 

logcat ouput jest:

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 

Chodzi o to, dlaczego dostaję obraz z identyfikatorem R.id.tuxtView2 i tekstem o identyfikatorze R.id.imageView1. Aplikacja ulega awarii, jeśli chcę przypisać wartość tekstową do obiektu R.id.tuxtView2, rzutowanego jako TextView.

+2

Spróbuj przeładować swój projekt, może coś nie tak z R.java lub sprawdź, czy wywołujesz dobry plik za pomocą metody setContentView. –

+0

Dobrze udokumentowane pytanie. Przepraszam, nie mam pojęcia, dlaczego tak się dzieje. –

+0

@JeremyD, wow, Próbowałem wszystkiego, przez kilka godzin, z wyjątkiem restartu zaćmienia. Ponownie uruchomiłem zaćmienie i nagle zadziałało znowu. Myślałem, że robię coś nie tak w moim kodzie. Opublikuj to jako odpowiedź i zagłosuję na ciebie + zaznacz to jako rozwiązane. Dzięki! – jonepatr

Odpowiedz

21

spróbuj odświeżyć swój projekt, może coś z R.java lub zweryfikować dzwonisz dobrą plik setContentView.

Po odświeżeniu/wyczyszczeniu projektu plik R.java zostanie ponownie załadowany i znajdzie wymienione widżety.

+2

Po prostu zaczepię tę odpowiedź, ponieważ masz rację, ale dodam, że usunięcie przeze mnie zawartości folderu/gen było jedynym sposobem na rozwiązanie bardzo podobnego problemu. – jiggy

+2

Dziękujemy! To bardzo przerażające, gdy kod Google twierdzi, że "1 == 2";) – Adam

+1

UWAGA: nie rób tego, co zrobiłem i usuń folder/gen - zachowaj ostrożność, aby usunąć tylko jego zawartość. Jeśli usuniesz całość, tymczasowo zepsuje ADT (ale pojawi się błąd informujący, jak to naprawić, co jest w porządku), ale na stałe zrywa SVN (jeśli używasz SVN). Ugh. Jedynym rozwiązaniem jest "przywrócenie" folderu w SVN. – Adam

2

Skopiowałem twój kod i zrobiłem fałszywą aplikację. Mam te wyniki:

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 

Widocznie nie ma nic złego z kodem

+0

Dzięki, wypróbowałem wszystko oprócz restartu zaćmienia, które okazało się źródłem problemu. Dziękujemy za zabranie czasu:) – jonepatr

+0

Bez problemu. Następnym razem możesz spróbować kliknąć prawym przyciskiem myszy na swoim projekcie i wybrać Narzędzia Android-> Napraw właściwości projektu LUB przejść pod Eclipse bar Projekt-> Wyczyść projekt – RonzyFonzy

0

Próbowałem już prawie wszystkiego, ale nic nie działało, dopóki nie dodałem nowego komponentu do działania i po uruchomieniu zauważyłem, że nowy komponent się nie wyświetlił. Sugerował on, że moja aplikacja nie aktualizowała się z biegami. To działało przez ręczne odinstalowanie starej wersji aplikacji i ponowne uruchomienie.