Pregunta findViewById en Fragment


Estoy intentando crear un ImageView en un Fragmento que se referirá al elemento ImageView que he creado en el XML para el Fragmento. sin embargo, el findViewById el método solo funciona si extiendo una clase de actividad. ¿Hay alguna forma de que también pueda usarlo 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);
    }
}

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


842
2018-06-27 16:24


origen


Respuestas:


Utilizar getView () o el parámetro View desde la implementación del onViewCreated método. Devuelve la vista de raíz para el fragmento (el que regresó 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(), tú no puedo usarlo dentro onCreate() o onCreateView() métodos del fragmento


1224
2018-06-27 16:34



Debes inflar la vista del Fragmento y llamar findViewById() sobre el View vuelve.

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

553
2018-06-27 16:35



Dentro Fragment clase que obtendrás onViewCreated () reemplazar método donde siempre debe inicializar sus puntos de vista ya que en este método obtiene objetos de vista con los cuales puede encontrar sus puntos de vista 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);
}

Siempre recuerda en caso de Fragmento que onViewCreated() método no se llamará automáticamente si está devolviendo nulo o super.onCreateView() de onCreateView() método. Se llamará por defecto en caso de ListFragment como ListFragment regreso FrameLayout por defecto.

Nota: puede obtener la vista de fragmento en cualquier lugar de la clase utilizando getView() una vez onCreateView() ha sido ejecutado con éxito.  es decir

getView().findViewById("your view id");

115
2018-03-04 14:46



Me doy cuenta de que esta es una vieja pregunta, pero la respuesta prevaleciente deja algo que desear.

La pregunta no es clara lo que se requiere de imageView - ¿lo estamos devolviendo como vista, o simplemente guardando una referencia para más adelante?

De cualquier manera, si el ImageView viene del diseño inflado, la forma correcta de hacerlo sería:

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

61
2018-04-11 10:46



Obtenga primero la vista de fragmento y luego obtenga de esta vista su ImageView.

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

41
2018-06-27 16:35



También podrías hacerlo en el onActivityCreated Método.

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}

Como lo hacen aquí: http://developer.android.com/reference/android/app/Fragment.html  (obsoleto en el nivel 28 de la API)

getView().findViewById(R.id.foo);

y

getActivity().findViewById(R.id.foo);

es posible.


19
2017-10-09 23:22



getView() dará la vista de la raíz

View v = getView().findViewByID(R.id.x); 

18
2017-09-03 12:41



Puede sobrescribir enViewCreated () que se llama justo después de que se hayan inflado todas las vistas. Es el lugar correcto para completar el miembro de tu Fragmento View variables. Aquí hay un ejemplo:

class GalleryFragment extends Fragment {
    private Gallery gallery;

    (...)

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        gallery = (Gallery) view.findViewById(R.id.gallery);
        gallery.setAdapter(adapter);
        super.onViewCreated(view, savedInstanceState);
    }
}

17
2018-03-28 15:58



El método getView () no trabajará en fragmentos fuera de OnCreate y métodos similares.

Tiene dos formas, pasar la vista a la función en el modo creado (lo que significa que solo puede ejecutar sus funciones cuando se está creando la vista) o establecer la vista como una variable:

private View rootView;

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

public void doSomething () {
    ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId);
}

13
2018-03-30 01:02



EditText name = (EditText) getView().findViewById(R.id.editText1);
EditText add = (EditText) getView().findViewById(R.id.editText2);  

10
2017-12-20 13:03



de acuerdo con llamar findViewById() en la vista.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View V = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView) V.findViewById(R.id.my_image);

    return V;
}

9
2018-05-29 16:35