findViewById en fragmento

Resuelto simplified. asked hace 54 años • 0 respuestas

Estoy intentando crear un ImageView en un Fragmento que hará referencia al elemento ImageView que he creado en el XML para el Fragmento. Sin embargo, el findViewByIdmétodo sólo funciona si extiendo una clase de Actividad. ¿Existe alguna forma de que pueda usarlo también en Fragment?

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ImageView imageView = (ImageView)findViewById(R.id.my_image);
        return inflater.inflate(R.layout.testclassfragment, container, false);
    }
}

El findViewByIdmétodo tiene un error que indica que el método no está definido.

simplified. avatar Jan 01 '70 08:01 simplified.
Aceptado

Utilice getView() o el parámetro Ver para implementar el onViewCreatedmétodo. Devuelve la vista raíz del fragmento (la que devuelve el onCreateView()método) . Con esto puedes llamar findViewById().

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
    // or  (ImageView) view.findViewById(R.id.foo); 
} 

Como getView()funciona solo después onCreateView(), no puedes usarlo dentro onCreate()o en los onCreateView()métodos del fragmento.

advantej avatar Jun 27 '2011 16:06 advantej

Debe inflar la vista del Fragmento y llamarlo findViewById()para que Viewregrese.

public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
     return view;
}
LeffelMania avatar Jun 27 '2011 16:06 LeffelMania

Dentro de Fragmentla clase obtendrá el método de anulación onViewCreated() donde siempre debe inicializar sus vistas, ya que en este método obtiene el objeto de vista mediante el cual puede encontrar sus vistas como:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.yourId).setOnClickListener(this);

    // or
    getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}

Recuerde siempre en el caso de Fragment que el onViewCreated()método no se llamará automáticamente si devuelve nulo o super.onCreateView()desde onCreateView()el método. Se llamará de forma predeterminada en caso de que ListFragmentse ListFragmentdevuelva FrameLayoutde forma predeterminada.

Nota: puede obtener la vista del fragmento en cualquier parte de la clase utilizando getView()una vez que onCreateView()se haya ejecutado correctamente. es decir

getView().findViewById("your view id");
Ankur Chaudhary avatar Mar 04 '2014 14:03 Ankur Chaudhary