Cuando usamos actividades o activities en Android, es fácil obtener un elemento de la vista usando findViewById.
La cosa cambia cuando queremos invocar a findViewById
en un Fragment de Android, ya sea usando Java o Kotlin. Es por eso que en este post te mostraré cómo y cuándo invocar a findViewById
en un fragment.
Veremos los ejemplos en Java y Kotlin.
findViewById en Fragment
En resumen, lo único que tenemos que hacer es invocar a findViewById
desde la vista padre. Esta vista puede ser obtenida dentro del método onCreateView
o en el método onViewCreated
.
Método 1: en el onCreateView
Seguramente tu fragmento estará sobrescribiendo este método en donde simplemente infla al Layout. Algo así al menos en Java:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_gastos, container, false);
}
Fíjate en la firma del método, estamos regresando la Vista o View
así que aquí podemos recuperarla en una variable, definir los elementos y luego regresarla:
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_gastos, container, false);
FloatingActionButton floatingActionButton = view.findViewById(R.id.fabAgregarGasto);
return view;
}
Obtenemos la vista en la línea 6, luego invocamos a findViewById
desde esa variable y finalmente la devolvemos. Así es como podemos declarar todas nuestras vistas y claramente agregar listeners o cualquier cosa.
Aquí tenemos el ejemplo con Kotlin:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_deudas, container, false)
fabAgregarDeuda = view.findViewById(R.id.fabAgregarDeuda)
fabAgregarDeuda.setOnClickListener {
// Aquí código del click :)
}
return view
}
Obtenemos la vista en la línea 4, después invocamos a findViewById
, agregamos un listener y al final regresamos la vista.
Método 2: onViewCreated
Este método es invocado cuando la vista ya se ha creado. Recibe una variable de tipo View
que tiene el método findViewById
. Veamos el ejemplo con Java:
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
FloatingActionButton floatingActionButton = view.findViewById(R.id.fabAgregarGasto);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Aquí el código cuando se hace click
}
});
}
Como ves, al método onViewCreated
se le pasa la vista en la variable view
. Ignora las anotaciones de NonNull
y Nullable
, fíjate en que la llamada a findViewById
está en la línea 3, y se invoca a partir de la variable que recibimos dentro de la función.
Después de recuperar la variable podemos agregarle listeners o simplemente trabajar con la vista recién obtenida.
El equivalente en Kotlin es:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
adView = view.findViewById(R.id.adView)
}
Recibimos una variable de tipo View
dentro de la función, y luego invocamos a findViewById
en la línea 2.
Si me preguntas, yo prefiero el método onCreateView
.
GRACIAS, lo has explicado de una forma muy simple y clara, me ayudó.