14

Non riesco a capire il motivo per cui findViewById restituisce l'elemento sbagliato, qui è la classe:findViewById ritorna all'elemento sbagliato?

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

E qui è il 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> 

L'ouput 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 

Quindi il punto è, perché ottengo una vista di immagini con id R.id.tuxtView2 e una vista testo con id R.id.imageView1. L'applicazione si blocca se voglio assegnare un valore di testo a R.id.tuxtView2, castato come TextView.

+2

Provare a ricaricare il progetto, forse qualcosa di sbagliato con R.java, o verificare che si stia chiamando il file buono con setContentView. –

+0

Domanda ben documentata. Spiacente, nessun indizio del perché questo accada. –

+0

@JeremyD, wow, stavo provando tutto, per un paio d'ore, tranne il riavvio di eclissi. Ho riavviato eclissi e improvvisamente ha funzionato di nuovo. Pensavo di fare qualcosa di sbagliato nel mio codice. Pubblicalo come risposta e ti voterò + contrassegnalo come risolto. Grazie! – jonepatr

risposta

21

provate a ricaricare il vostro progetto, forse qualcosa di sbagliato con R.java, o verificare che si sta chiamando il buon file con setContentView.

Con l'aggiornamento/pulizia del progetto, il file R.java verrà ricaricato e troverà i widget con nome.

+2

Ti porterò semplicemente su questa risposta dato che sei corretto, ma aggiungerò che per me eliminare il contenuto della mia cartella/gen era l'unico modo per risolvere un problema molto simile. – jiggy

+2

Grazie! È molto spaventoso quando il codice di Google afferma che "1 == 2";) – Adam

+1

NB: non fare ciò che ho fatto ed eliminare la tua cartella/gen - fai attenzione a cancellare solo il CONTENUTO di esso. Se elimini tutto, interrompe temporaneamente ADT (ma ottieni un errore che ti dice come aggiustarlo, che va bene), ma interrompe in modo permanente SVN (se stai usando SVN). Ugh. L'unica soluzione è "ripristinare" la cartella in SVN. – Adam

2

Ho copiato il codice e creato un'app fittizia. Ho ottenuto questi risultati:

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 

Pare che ci sia niente di sbagliato con il codice

+0

Grazie, ho provato tutto tranne il riavvio di Eclipse, che si è rivelato essere la fonte del problema. Grazie per il tuo tempo:) – jonepatr

+0

Nessun problema. La prossima volta potresti provare a fare clic con il pulsante destro del mouse sul tuo progetto e selezionare Strumenti Android-> Correggi le proprietà del progetto OPPURE vai sotto la barra Eclipse Progetto-> Pulisci progetto – RonzyFonzy

0

Ho provato quasi tutto qui, ma non ha funzionato fino a quando non ho aggiunto un nuovo componente all'attività e, dopo l'esecuzione, ho notato che il nuovo componente non mostrava. Ha suggerito che la mia app non si stava aggiornando con le esecuzioni. Ha funzionato disinstallando manualmente la vecchia versione dell'app e poi di nuovo in esecuzione.

Problemi correlati