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 findViewById
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);
}
}
El findViewById
mé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
onViewCreated
mé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
ImageView
proviene 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 anull
enonDestroyView()
o que se escape elActivity
.Necesitas inflar la vista del Fragmento y llamar
findViewById()
alView
que regresa.fuente
NullPointerException
.Dentro de la
Fragment
clase 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ónListFragment
como predeterminada.ListFragment
FrameLayout
Nota: puede obtener la vista de fragmentos en cualquier lugar de la clase utilizando
getView()
una vez queonCreateView()
se haya ejecutado correctamente. es decirfuente
view
pasado aonViewCreated
causas inmóvilesNullPointerException
pero usargetActivity()
está bien. Alguna idea de por qué?onCreateView
mé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
ImageView
proviene 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
onActivityCreated
Mé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
View
variables miembro de su Fragmento . Aquí hay un ejemplo:fuente
Dentro de la
Fragment
clase obtenemos elonViewCreated()
método de anulación donde siempre debemos inicializar nuestras vistas porque en este método obtenemos elview
objeto. 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
ImageView
declarado en sumy_layout.xml
archivo, 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