Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


FindViewById devuelve NULL cuando se utiliza Fragment

Soy nuevo en Android y, por supuesto, en Fragments.

Quiero acceder a los controles de mi fragmento en la actividad principal, pero 'findViewById' devuelve null. Sin fragmento el código funciona bien.

Aquí está parte de mi código:

El fragmento :

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:ignore="HardcodedText" > <EditText android:id="@+id/txtXML" android:layout_width="fill_parent" android:layout_height="fill_parent" android:ems="10" android:scrollbars="vertical"> </EditText> </LinearLayout> 

La onCreate de MainActivity:

  @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.main); this.initialisePaging(); EditText txtXML = (EditText) findViewById(R.id.txtXML);} 

En este punto el txtXML es nulo.

¿Qué falta en mi código o qué debo hacer?

6 Solutions collect form web for “FindViewById devuelve NULL cuando se utiliza Fragment”

Prueba de esta manera en tus fragmentos en onCreateView

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } LinearLayout ll = (LinearLayout )inflater.inflate(R.layout.tab_frag1_layout, container, false); EditText txtXML = (EditText) ll.findViewById(R.id.txtXML); return ll; } 

Usted debe inflate el diseño del fragmento en el método onCreateView del Fragment entonces usted puede simplemente acceder a sus elementos con findViewById en su Activity .

En este ejemplo, mi diseño de fragmentos es LinearLayout, por lo que echo el resultado de inflate a LinearLayout.

  public class FrgResults extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //some code LinearLayout ll = (LinearLayout)inflater.inflate(R.layout.frg_result, container, false); //some code return ll; } } 

Llego tarde, pero para cualquiera que tenga este problema. Debe inflar su vista en el método onCreateView. A continuación, anule el método onCreateActivity y puede utilizar getView().findViewById allí.

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment, container, false); } 

No puedes acceder a la vista del fragmento en la clase de actividad por findViewById lugar de lo que puedes hacer es …

Debes tener un objeto de la clase Fragment en tu archivo de actividad, ¿no? Cree el método getter de la clase EditText en esa clase de fragmento y acceda a ese método en su actividad.

Crear una llamada de vuelta en la clase Fragmento en el evento donde necesita el obj de Edittext.

1) Pruebe esto:

Menú Eclipse -> Proyecto -> Limpieza …

actualizar

2) Si tiene 2 o más instancias de layout "principal", compruebe si todas tienen una vista con 'txtXML' id

3)

Un Fragmento es una parte de la interfaz de usuario de una aplicación o comportamiento que se puede colocar en una Actividad. La interacción con fragmentos se realiza a través de FragmentManager, que se puede obtener a través de Activity.getFragmentManager () y Fragment.getFragmentManager ().

La clase Fragment se puede utilizar de muchas maneras para lograr una amplia variedad de resultados. Es fundamental, representa una operación o interfaz en particular que se ejecuta dentro de una actividad más grande. Un Fragmento está estrechamente ligado a la Actividad en la que se encuentra, y no puede ser utilizado aparte de uno. Aunque Fragmento define su propio ciclo de vida, ese ciclo de vida depende de su actividad: si se detiene la actividad, no se pueden iniciar fragmentos dentro de ella; Cuando la actividad es destruida, todos los fragmentos serán destruidos.

Estudie esto . Debe utilizar FragmentManager.

Si desea utilizar findViewById como se utiliza en las actividades onCreate, simplemente puede poner todos en overrided método onActivityCreated.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.