Android

findViewById en Fragment de Android

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.

findViewById en Fragment de Android usando Java o KotlinfindViewById en Fragment de Android usando Java o Kotlin
Ejemplo de invocación a findViewById en Kotlin

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.

Te invito a leer más sobre Java y Kotlin en mi blog 🙂

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Resetear GOOJPRT PT-210 MTP-II (Impresora térmica)

El día de hoy vamos a ver cómo restablecer la impresora térmica GOOJPRT PT-210 a…

1 semana hace

Proxy Android para impresora térmica ESC POS

Hoy voy a enseñarte cómo imprimir en una impresora térmica conectada por USB a una…

1 semana hace

Android – Servidor web con servicio en segundo plano

En este post voy a enseñarte a programar un servidor web en Android asegurándonos de…

1 semana hace

Cancelar trabajo de impresión con C++

En este post te quiero compartir un código de C++ para listar y cancelar trabajos…

1 mes hace

Copiar bytes de Golang a JavaScript con WebAssembly

Gracias a WebAssembly podemos ejecutar código de otros lenguajes de programación desde el navegador web…

2 meses hace

Imprimir PDF con Ghostscript en Windows de manera programada

Revisando y buscando maneras de imprimir un PDF desde la línea de comandos me encontré…

2 meses hace