Acceso mediante programación a una vista que se define en XML de un fragmento en Android

Estoy en el proceso de crear una aplicación para Android 3 que tenga una navegación basada en pestañas. Al ser bastante nuevo en Android busqué tab tutoriales y encontré algunos enfoques diferentes, de los cuales una implementación basada en Fragmentos + ActionBar parecía ser la mejor. He seguido estos tutoriales

Http://www.abelski.com/courses/android3ui/actionbar.pdf (las últimas diapositivas) y http://www.youtube.com/watch?v=gMu8XhxUBl8 (misma lección en formato de video)

… y llegué al punto donde aparecen las pestañas, puedo cambiar entre ellas OK, y textViews simples dentro de ellas aparecen bien.

Ahora, surgen problemas cuando quiero que una de las pestañas tenga un widget de hilado que se define en el archivo XML del fragmento y lo llene con elementos que están definidos en el archivo strings.xml. Cuando intento tener acceso al spinner con getViewById () del método onCreate () siempre obtengo un valor nulo como resultado.

Según lo entiendo, para arreglar esto necesito declarar de alguna manera el XML del fragmento (similarmente como el diseño principal se ha hecho con setContentView (R.layout.main) ) para que getViewById () sepa dónde buscar el spinner (Eclipse Autocompletar lo encuentra ya aunque). Sin embargo, estoy en la pérdida completa de cómo hacer esto, ya que ninguno de los tutoriales abordó el escenario en el que desea modificar el contenido de fragmentos basados ​​en XML dentro del código.

El archivo main.xml se ve así:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/fragment_placeholder"></LinearLayout> </LinearLayout> 

Tab1_fragment.xml como este:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Spinner android:id="@+id/spinner1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout> 

Y método onCreate como este:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar ab = getActionBar(); ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab newAuditTab = ab.newTab().setText(R.string.tabheader_new_audit); Fragment newAuditFrag = new FragmentTabNewAudit(); newAuditTab.setTabListener(new TabListener(newAuditFrag)); ab.addTab(newAuditTab); //and the same for other tabs Spinner spinner = (Spinner) findViewById(R.id.spinner1); // this returns null ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.cell_array, android.R.layout.simple_spinner_item); //cell_array is defined in strings.xml adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(new MyOnItemSelectedListener()); } 

Acceder a las vistas que se definen en main.xml a través de R.id funciona bien, así que en este caso el problema no está relacionado con la importación automática de Eclipse de la clase R, creo.

Supongo que podría definir el hilandero de forma programática para evitar el problema, pero probablemente haya una solución más elegante a esto, espero. No puedo ver el cuadro grande de Android lo suficientemente bien como para saber dónde mirar.

Como el spinner no es un hijo de la Activity sí, findViewById no puede encontrarlo. Como el hilandero es un niño del fragmento, puede intentar:

 Spinner spinner = (Spinner)newAuditFrag.getView().findViewById(R.id.spinner1); 

Sin embargo, no estoy seguro de cuándo se crea la vista de un fragmento, por lo que getView() también puede devolver null ese punto en su código. A continuación, puede intentar mover el código en onResume , que se llama después onCreate .

  • Necesita una respuesta definitiva para diseñar las pestañas de Android ActionBar
  • Pestañas de Viewpager Fragmento y Fragmentos normales
  • Separa la pila trasera de cada pestaña en Android mediante Fragmentos
  • Tabhost- establece la posición de la divisa en pestañas Android
  • Ocultar pestañas viewPager dinámicamente
  • ¿Debe un novato olvidarse de los fragmentos?
  • Actualizar Actividad actual haciendo clic en la pestaña activa
  • Ficha de Android como pie de página
  • Hwo para corregir el error de método de reemplazo?
  • Cómo abrir pestaña en Espresso
  • Lengüetas de material con estilo de Android 5.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.