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.

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

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.