web-dev-qa-db-fra.com

Vue de recyclage de kotlin à défilement sans fin / ListView

J'essaie désespérément d'implémenter un défilement sans fin sur une Android utilisant kotlin. Tous les tutoriels sont inutiles car ils n'expliquent pas les choses correctement. Ainsi, par exemple: https: // github .com/chetdeva/recyclerview-bindings

cela semble prometteur mais l'auteur utilise des phrases comme "mettez ceci dans votre BindingAdapter" donc je regarde ce que c'est BindingAdapter, j'ai trouvé un fichier Java mais si vous insérez quelque chose dedans) Je reçois des erreurs. C'est comme si tout ce que j'essayais échoue directement.

Les autres tutoriels sont écrits en Java et même avec l'option "translate to kotlin" son inutile car le code traduit jette 100 erreurs.

J'ai essayé des choses comme:

setContentView(R.layout.activity_main)
    list.layoutManager = LinearLayoutManager(this)
    list.hasFixedSize()
    list.adapter = ListAdapter(this, getLists())
    val list_view: RecyclerView = findViewById(R.id.list)
    fun setRecyclerViewScrollListener() {
        list_view.addOnScrollListener(object : RecyclerView.OnScrollListener() {
            override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
                val height = list_view.getHeight()

                val diff = height-dy
                if (diff < 1000){
                    /*load next list */
                }
            }
        })
    }
    setRecyclerViewScrollListener()
}

ou ca

val inflater = LayoutInflater.from(this@MainActivity)
val layout = inflater.inflate(R.layout.append_list, null, false)
button.setOnClickListener{screen.addView(layout)}

Existe-t-il une méthode à l'épreuve des balles où vous pouvez simplement ajouter des elemets comme avec html et js? J'ai écrit cet extrait en 2 min. Existe-t-il une méthode similaire "facile" dans Android/Kotlin?

$("#next").click(function(){
  $(".append_text").append("new text <img src='http://static.webshopapp.com/shops/015426/files/005031634/560x625x2/kek-amsterdam-wandtattoo-hase-forest-friends-braun.jpg'/>")
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="next">Load</button>

<span class="append_text"> </span>

En général, je reçois beaucoup d'erreurs pour avoir choisi la mauvaise mise en page. J'ai essayé Listview et contrainlayout et le recyclage Layout et Vertical Scrolling layout et ainsi de suite. Existe-t-il une simple balise body où vous pouvez simplement ajouter un fichier xml?

Je pense que je vais dans le mauvais sens tout le temps parce que je vois tout à travers les yeux d'un Web. Dev. while Android n'a pas le DOM classique. Quelqu'un peut-il me l'expliquer avec un exemple minimal sur la façon d'ajouter un fichier xml au fichier xml principal lors du clic/défilement du bouton?

7
hansTheFranz

J'utilise cette méthode pour ajouter une fonctionnalité de défilement sans fin à une vue de recyclage dans Kotlin:

private fun setRecyclerViewScrollListener() {
    scrollListener = object : RecyclerView.OnScrollListener() {
        override fun onScrollStateChanged(recyclerView: RecyclerView?, newState: Int) {
            super.onScrollStateChanged(recyclerView, newState)
            val totalItemCount = recyclerView!!.layoutManager.itemCount
            if (totalItemCount == lastVisibleItemPosition + 1) {
                Log.d("MyTAG", "Load new list")
                recycler.removeOnScrollListener(scrollListener)
            }
        }
    }
    recycler.addOnScrollListener(scrollListener)
}

la variable lastVisibleItemPosition est déclarée comme suit:

private val lastVisibleItemPosition: Int get() = linearLayoutManager.findLastVisibleItemPosition()

private lateinit var scrollListener: RecyclerView.OnScrollListener

Appelez simplement la méthode setRecyclerViewScrollListener() à chaque fois que vous nedd pour ajouter cette fonctionnalité à recyclerView.

J'espère que ça aide,

Leonardo

9
Leonardo Medori