No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creación del loader y resultados de la implementación

8/32
Recursos

Aportes 12

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Regístrate o inicia sesión para participar.

no sé por que al profesor no le dió error pero a mi me daba error por que no estaba instanciado favoriteTransferItems asi que decidí usar null-safety

package com.cristianvillamil.platziwallet.ui.home.view

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.cristianvillamil.platziwallet.R
import com.cristianvillamil.platziwallet.ui.home.FavoriteTransfer

class FavoriteTransferAdapter : RecyclerView.Adapter<FavoriteTransferViewHolder>() {

	private var favoriteTransferItems: List<FavoriteTransfer>? = null
	override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteTransferViewHolder =
		FavoriteTransferViewHolder(
			LayoutInflater.from(parent.context).inflate(
				R.layout.favorite_transfer_row,
				parent,
				false
			)
		)


	override fun getItemCount(): Int {
		return favoriteTransferItems?.size ?: 0
	}

	override fun onBindViewHolder(holder: FavoriteTransferViewHolder, position: Int) =
		holder.bind(favoriteTransferItems?.get(position)!!)

	fun setData(favoriteTransferItems: List<FavoriteTransfer>) {
		this.favoriteTransferItems = favoriteTransferItems
		notifyDataSetChanged()
	}


}

Para solucionar el error al momento de probar el proyecto

En el **FavoriteTransferAdapter.kt **

Modifiquen la Linea

private lateinit var favoriteTransferItems: List<FavoriteTransfer>

por:

private var favoriteTransferItems: List<FavoriteTransfer>  = arrayListOf()

Estará funcionando el proyecto

Esta puede ser otra forma de crear un delay

HAY VARIAS COSAS QUE NO FUNCIONAN CORRECTAMENTE.
Se supone que al llamar a la lista que tenemos en caché (dentro del HomeInteractor), tendrían que cambiar los nombres, las cantidades de dinero, aparecer fechas y fotos… Y no lo hace. Además debería aparecer una animación junto con la foto de perfil del usuario, que ni sale la foto ni sale la animación en cuanto lanzas la app… Hay muchos errores que no concuerdan con el código que tenemos en archivos y enlaces.
Lo que yo eniendo es que NO se han molestado ni en comprobar si el XML que muestra la fila de transferencias está correcto (que sí lo está) lo que me lleva a entender QUE NO HAN TENIDO GANAS DE HACER EL PASO INTERMEDIO PARA QUE LA VISTA GENERE CADA NUEVO ITEM DEL CACHÉ… Si este curso lo está viendo alguien que no sabe nada de Android, cierra el vídeo y Platzi y se va a otros cursos en otros lugares… Ocurre mucho en todos los cursos. Se saltan pasos SUPERIMPORTANTES para aquellos que están comenzando (y que son los que quieren aprender) y se explican cosas innecesarias que luego no importan.

Notar que el proyecto como tal carece de algunos detalles para que pueda ejecutarse correctamente.
Algunos de ellos son:
.
FavoriteTransferAdapter
.
En este se requiere inicializar la lista de favoriteTransferItems en null. Lo hice de la siguiente manera:

class FavoriteTransferAdapter : RecyclerView.Adapter<FavoriteTransferViewHolder>() {

    private var favoriteTransferItems: List<FavoriteTransfer>? = null
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FavoriteTransferViewHolder =
            FavoriteTransferViewHolder(
                    LayoutInflater.from(parent.context).inflate(
                            R.layout.favorite_transfer_row,
                            parent,
                            false
                    )
            )


    override fun getItemCount(): Int{
        return favoriteTransferItems?.size ?: 0
    }

    override fun onBindViewHolder(holder: FavoriteTransferViewHolder, position: Int) {
        // holder.bind(favoriteTransferItems?.get(position)!!)
        favoriteTransferItems?.get(position)?.let { holder.bind(it) }
    }

    fun setData(favoriteTransferItems: List<FavoriteTransfer>) {
        this.favoriteTransferItems = favoriteTransferItems
        notifyDataSetChanged()
    }


}

.
.
FavoriteTransferViewHolder
.
En esta clase, no enlazaron las vistas con los datos que traemos de HomeInteractor … razón por la cual se muestran cards con la misma información; información que fué previamente asignada en el xml fragment_home.
Adicional a esto, agregué una función para dar formato a los valores double de amount de forma que se agrega una coma “,” para separar los miles. Acá el código
.

class FavoriteTransferViewHolder(private val view: View) : RecyclerView.ViewHolder(view) {

    @SuppressLint("SetTextI18n")
    fun bind(item: FavoriteTransfer) {
        val photoImageView = view.findViewById<ImageView>(R.id.profilePhotoImageView)
        val name = view.findViewById<TextView>(R.id.nameTextView)
        val transferAmount = view.findViewById<TextView>(R.id.transferredAmountTextView)
        val transferTime = view.findViewById<TextView>(R.id.transferTimeTextView)

        Picasso.get().load(item.photoUrl).into(photoImageView)
        name.text = item.name
        transferAmount.text = "$${formatingAmountOnDisplay(item)}"
        transferTime.text = item.date
    }

    private fun formatingAmountOnDisplay(item: FavoriteTransfer): String {
        val amount = item.amount.toString()
        var firstSegment: String = ""
        var secondSegment: String = ""
        var formatedText : String = ""

        if ((amount.length - 2) > 3 && (amount.length - 2) >= 6 ) {

            for (i in 0..2) {
                firstSegment += amount[i].toString()
            }

            for (j in 3 until amount.length) {
                secondSegment += amount[j].toString()
            }

            formatedText = "${firstSegment},${secondSegment}"

        }else if ((amount.length - 2) > 3 && (amount.length - 2) >= 5) {
            for (i in 0..1) {
                firstSegment += amount[i].toString()
            }

            for (j in 2 until amount.length) {
                secondSegment += amount[j].toString()
            }

            formatedText = "${firstSegment},${secondSegment}"

        }else if ((amount.length - 2) > 3 && (amount.length - 2) >= 4) {
            for (i in 0..0) {
                firstSegment += amount[i].toString()
            }

            for (j in 1 until amount.length) {
                secondSegment += amount[j].toString()
            }

            formatedText = "${firstSegment},${secondSegment}"
        }else {
            formatedText = item.amount.toString()
        }

        return formatedText
    }
}

Si se atrasaron en el código pueden descargar el archivo desde la sección ‘Archivos y Enlaces’, al final de todos esos documentos bajando para abajo le dan a ‘descargar todo’ y se les bajara un archivo zip, lo extraen y lo abren de forma tradicional en Android Studio…
(Abren Android Studios y abajo de la opción ‘Start a new proyect’ abajo hacen click a la opción ‘Open an exist proyect’ y escogen el archivo descomprimido del zip)

Podemos usar los mismos constraints definidos en el recyclerview en nuestro Progress bar para que aparezca en la zona del recycleview, solo para darle un detallito mas en el diseño:

Excelente explicación, le estaba batallando para entenderle a esta arquitectura 😄, gracias Cristian

Hasta ahora muy bueno el curso y el profe de muy buena calidad.

Las clases e interfaces que acabamos de crear me salen de color rojo en las pestañas del IDE… No hay ningún error (sale el check verde arriba a la derecha). Alguna idea de por qué sale así??? Cuando corro la app, se carga en el emulador, pero al hacer el launch se me crashea y se cierra… Será también por lo mismo que las pestañas del IDE en rojo???
Alguien puede ayudarme con ello???

Cuando lanzo la app en mi móvil de prueba físico, al girarlo y ponerlo lateral no se ve la pantalla correctamente. Si se supone que hay constraints layouts para que se vea tanto vertical como horizontal en cualquier dispositvo, por qué no se ve bien y no hace scroll??? Alguna idea???

FavoriteTransferAdapter.kt
private var favoriteTransferItems: List<FavoriteTransfer> = arrayListOf()