Estoy tratando de crear un ImageView en un Fragmento que se referirá al elemento ImageView que he creado en el XML para el Fragmento. Sin embargo, el findViewByIdmé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);
}
}
El findViewByIdmétodo tiene un error que indica que el método no está definido.
android
android-fragments
android-imageview
findviewbyid
simplificado.
fuente
fuente

Respuestas:
Use getView () o el parámetro View desde la implementación del
onViewCreatedmétodo. Devuelve la vista raíz del fragmento (la que devuelve elonCreateView()método) . Con esto puedes llamarfindViewById().Como
getView()funciona solo despuésonCreateView(), no puede usarlo dentroonCreate()o losonCreateView()métodos del fragmento.fuente
ImageViewproviene del diseño inflado; consulte mi respuesta para obtener más detalles. De lo contrario, onCreateView es el lugar correcto para hacer esto @ N-AccessDevonActivityCreated()es el lugar recomendado para buscar y almacenar referencias a sus vistas. Usted debe limpiar estas referencias almacenados mediante el establecimiento de vuelta anullenonDestroyView()o que se escape elActivity.Necesitas inflar la vista del Fragmento y llamar
findViewById()alViewque regresa.fuente
NullPointerException.Dentro de la
Fragmentclase obtendrá el método de anulación onViewCreated () donde siempre debe inicializar sus vistas, ya que en este método obtiene un objeto de vista con el que puede encontrar sus vistas como:Siempre recuerde en el caso de Fragment que el
onViewCreated()método no se llamará automáticamente si está devolviendo null osuper.onCreateView()delonCreateView()método. Se llamará de forma predeterminada en caso de devoluciónListFragmentcomo predeterminada.ListFragmentFrameLayoutNota: puede obtener la vista de fragmentos en cualquier lugar de la clase utilizando
getView()una vez queonCreateView()se haya ejecutado correctamente. es decirfuente
viewpasado aonViewCreatedcausas inmóvilesNullPointerExceptionpero usargetActivity()está bien. Alguna idea de por qué?onCreateViewmétodo. Acabo de depurar y resulta que hay un diseño (en mi casoFrameLayout). Dicho esto cuando trato de encontrar un elemento, devuelvenull. Por que esta sucediendo?Me doy cuenta de que esta es una vieja pregunta, pero la respuesta predominante deja algo que desear.
La pregunta no está clara de qué se requiere
imageView: ¿la estamos devolviendo como la vista, o simplemente guardamos una referencia para más adelante?De cualquier manera, si
ImageViewproviene del diseño inflado, la forma correcta de hacerlo sería:fuente
Obtenga primero la vista de fragmentos y luego obtenga de esta vista su ImageView.
fuente
También puedes hacerlo en el
onActivityCreatedMétodo.Como lo hacen aquí: http://developer.android.com/reference/android/app/Fragment.html (en desuso en el nivel de API 28)
y
es posible.
fuente
getView()dará la vista raízfuente
Puede anular onViewCreated (), que se llama justo después de que se hayan inflado todas las vistas. Es el lugar correcto para completar las
Viewvariables miembro de su Fragmento . Aquí hay un ejemplo:fuente
Dentro de la
Fragmentclase obtenemos elonViewCreated()método de anulación donde siempre debemos inicializar nuestras vistas porque en este método obtenemos elviewobjeto. Usando este objeto podemos encontrar nuestras vistas como a continuación:fuente
El método getView () no funcionará en fragmentos fuera de OnCreate y métodos similares.
Tiene dos formas: pasar la vista a la función en el oncreate (lo que significa que solo puede ejecutar sus funciones cuando se está creando la vista) o establecer la vista como una variable:
fuente
1) primero infla el diseño de Fragment y luego puedes usar findviewbyId.
fuente
fuente
Utilizar
funcionará
fuente
de acuerdo con llamar
findViewById()a la vista.fuente
Nota :
Desde el nivel 26 de API, tampoco necesita emitir específicamente el resultado de findViewById, ya que utiliza la inferencia para su tipo de retorno.
Entonces ahora puedes simplemente hacer,
fuente
De acuerdo con la documentación sobre API nivel 11
Referencia, en Back Stack http://developer.android.com/reference/android/app/Fragment.html
Código corto
fuente
El uso
getView()devuelve la vista del fragmento, luego puede llamarfindViewById()para acceder a cualquier elemento de vista en la vista de fragmento.fuente
Prueba esto, me funciona
fuente
La mejor manera de implementar esto es la siguiente:
De esta manera, el rootView se puede usar para cada control definido en el diseño xml y el código es mucho más limpio de esta manera.
Espero que esto ayude :)
fuente
1) Declara tu archivo de diseño.
2) Luego, obtenga la identificación de su vista
fuente
Utilice el complemento de esqueleto de gradle , generará automáticamente las clases de titular de vista con la referencia a su diseño.
Ahora, suponiendo que haya
ImageViewdeclarado en sumy_layout.xmlarchivo, generará automáticamente la clase myLayout para usted.fuente
Prueba esto:
fuente
tratar
fuente
getView()más tardePuedes llamar
findViewById()con el objeto de actividad que obtienes dentro de tupublic void onAttach(Activity activity)método dentro de tu Fragmento.Guarde la actividad en una variable, por ejemplo:
En la clase Fragment :
private Activity mainActivity;En elonAttach()método:this.mainActivity=activity;Finalmente ejecute cada findViewById a través de lo deseable:
mainActivity.findViewById(R.id.TextView);fuente
Hay un método más llamado onViewCreated.
fuente
Dentro del método onCreateView
1) primero debe inflar el diseño / vista que desea agregar, por ejemplo. LinearLayout
2) Luego puede encontrar su ID de imageView desde el diseño
3) devolver el diseño inflado
fuente
Tienes que inflar la vista
fuente
En fragmentos, necesitamos una vista de esa ventana para poder hacer un onCreateView de este Fragmento.
Luego obtenga la vista y úsela para acceder a todos y cada uno de los identificadores de los elementos de esa vista.
fuente
El inflador de diseño aparece aquí. Layout Inflater es una clase que nos permite utilizar las vistas XML en código Java. Por lo tanto, puede inflar la vista xml raíz en la variable v con el siguiente código. Y luego usando v, puede encontrar las vistas secundarias de la vista raíz v.
fuente
La forma más fácil de usar estas cosas es usar butterknife. De esta manera, puede agregar tantos Onclciklisteners solo con @OnClick () como se describe a continuación:
fuente