0
votes

Android Kotlin Recyclage de la vue Reloaddata

J'ai "problème" avec ceci:

 Entrez la description de l'image ici , P>

où p précédente, et n comme suivant, les deux boutons appellent:

<androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycleView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="#E9DA1616"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/vipBtn" />


10 commentaires

Une question de débogage. Avez-vous vérifié la date Le paramètre a des valeurs différentes après chaque appel? Est recycléview.adapter le code de réaffectation jamais atteint?


Oui, essayez également ceci VAL DT = date () VAL URL = "https://example.com/$date.json?dt=${dt.time}" juste pour être sûr .. . Mais le problème reste


Assurez-vous que votre Aarray et votre gson n'est pas vide


Merci@unzila mais oui, j'ai vérifié cette centaine de fois ... toujours pas recharger


@Miff tu vous le déboguer? Ce n'est pas vide ?


oui bien sûr, et je reçois des données comme si cela devrait être


Êtes-vous sûr que l'appel HTTP est correct? Passez-vous la nouvelle date à chaque fois que vous cliquez sur les boutons suivants / précédents? Ajouter des journaux à la ligne où vous obtenez les lignes (pour vérifier si la liste des lignes n'est pas vide) et créez un nouvel adaptateur.


@Angelina oui, je reçois les données du serveur, println (), débogage W / Points d'arrêt ... Chaque fois que j'appelle Fetchjson Fonction I Créer un adaptateur Recycletview.adapter = ProduitsApprimer (cette @ DonnéesActivités, lignes)


Ce que je veux dire peut-être que vous obtenez les mêmes données que vous voyez les mêmes données :-) Vous ne pouvez pas avoir de problème avec rechargement car chaque fois que vous recevez des lignes, vous créez un nouvel adaptateur. Vous auriez besoin de notifydatasetchanged () lorsque vous prenez référence à l'adaptateur créé, prenez des éléments de liste et appelez CLEAR (), puis addall () sur eux. Ensuite, vous auriez besoin de notifier le jeu de données modifié.


Merci @angelina, je viens de poster la réponse :( a besoin toute la journée pour résoudre ce problème


3 Réponses :


0
votes

Peut-être essayez peut-être recyclerview.invalidate () après avoir passé de nouvelles données


0 commentaires

0
votes

wow! Juste wow!

J'ai une certaine expérience dans iOS et c'est littéralement ma 10ème heure de développement Android, mais c'est si étrange. P>

Ma mise en page de la question est la mise en page de la contrainte: P>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0A7463">
[...]


2 commentaires

Avez-vous eu des contraintes sur le recyclageView dans votre contrainteLayouout? RL et CL ont de nombreuses différences: RL a Match_Parent et CL ont une contrainte de correspondance ("0DP")


Oui, tout autour des éléments, en utilisant la vue de design



0
votes

Pour recharger les données de RecyclERView, vous pouvez utiliser ci-dessous des choses. Tout d'abord, ajoutez cette méthode dans votre classe d'adaptateur.

private fun fetchJson(date: String) {
    val url = "https://xxx/$date.json"
    println("URL: $url")
    val request = Request.Builder().url(url).build()
    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback {

        override fun onResponse(call: Call, response: Response) {
            val responseData = response.body()?.string()

            runOnUiThread {
                var rows: List<Product> = emptyList()

                try {
                    if (response.code() in 200..399) {
                        val gson = GsonBuilder().create()
                        rows = gson.fromJson(responseData,Array<Product>::class.java).toList()

                        recycleView.adapter.setData(rows)


                    }
                } catch (e: JSONException) {
                    e.printStackTrace()
                }
            }

        }

        override fun onFailure(call: Call, e: IOException) {
            println("Failed")
        }
    })
}


0 commentaires