2010-02-16 12 views
35

Ho un'attività MyActivity che si estende da MapActivity. Nel file .xml che contiene il layout posso includere solo il MapViewAndroid: findviewbyid: ricerca vista per id quando la vista non è sullo stesso layout invocato da setContentView

<com.google.android.maps.MapView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/trail_map_view" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:clickable="true" 
    android:apiKey="key" 
/> 

Tuttavia ho bisogno di trovare un'altra vista che si trova in un altro file .xml. Sfortunatamente, findViewById restituisce null. Come posso ottenere la vista che sto cercando?

Grazie mille!

+0

Perché ne avresti bisogno? Cosa stai cercando di fare? – Macarse

+0

È una situazione comune per mostrare una vista che non è presente. Ad esempio, se vuoi che una vista mostri quando un utente fa un'azione come premere un pulsante, fare clic sull'icona del menu, ecc. – hexicle

risposta

62

Grazie per il commento, capisco cosa intendi ma non volevo controllare i vecchi valori. Volevo solo ottenere un puntatore a quella vista.

Guardando il codice di alcuni oggetti ho appena trovato una soluzione alternativa, è possibile accedere alla radice di un layout utilizzando LayoutInflater.

Il codice è il seguente, dove this è un'attività:

final LayoutInflater factory = getLayoutInflater(); 

final View textEntryView = factory.inflate(R.layout.landmark_new_dialog, null); 

landmarkEditNameView = (EditText) textEntryView.findViewById(R.id.landmark_name_dialog_edit); 

Fondamentalmente supporta l'inflater per this contesto, accedere alla vista principale attraverso il metodo gonfiare e infine chiamano findViewById sulla vista radice del layout.

La speranza è utile per qualcuno! Bye

0

È impossibile. È possibile trovare e accedere solo alle viste attualmente in esecuzione. Se si desidera verificare il valore di ex. TextView utilizzato nell'attività di previus che è necessario salvare il valore è SharedPreferences, database, file o pass per Intent.

+10

impossibile non è nulla. –

0

prova:

Activity parentActivity = this.getParent(); 
if (parentActivity != null) 
{ 
    View landmarkEditNameView = (EditText) parentActivity.findViewById(R.id. landmark_name_dialog_edit); 
} 
3

ho cambiato nella mia attività, ma effettuato. Ecco il mio codice:

View layout = getLayoutInflater().inflate(R.layout.list_group,null); 
     try { 
      LinearLayout linearLayout = (LinearLayout) layout.findViewById(R.id.ldrawernav); 
      linearLayout.setBackgroundColor(Color.parseColor("#ffffff")); 
     } 
     catch (Exception e) { 

     } 

    } 
Problemi correlati