web-dev-qa-db-ja.com

エンドレススクロールコトリンリサイクルビュー/ ListView

Androidアプリに無限スクロールを実装しようと必死になっています。すべてのチュートリアルは、物事を適切に説明しないので役に立たないので、例: https:// github .com/chetdeva/recyclerview-bindings

有望に見えますが、作成者は「BindingAdapterにこれを置く」などのフレーズを使用しているので、これがBindingAdapterであるかを調べます。Javaファイルを見つけましたが、そこに何かを挿入するとエラーが発生します。私が試みることはすべて直接失敗します。

他のチュートリアルはJavaで記述されており、「kotlinに変換」オプションを使用しても、変換されたコードは100個のエラーをスローするため、役に立ちません。

私は次のようなことを試しました:

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()
}

またはこれ

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

あなたが単純にhtmlやjsのように要素を追加できる弾丸証明の方法はありますか?このスニペットは2分で書きました。 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>

一般に、間違ったレイアウトを選択すると、多くのエラーが発生します。 Listviewやcontrainlayout、リサイクルレイアウト、垂直スクロールレイアウトなどを試しました。単純にxmlファイルを追加できる単純なbodyタグはありますか?

Webの目を通してすべてを見るので、私はいつも間違った方法をとっていると思います。開発。一方、Androidには従来のDOMがありません。ボタンのクリック/スクロール時にメインのxmlファイルにxmlファイルを追加する方法の最小限の例で、誰かに説明できますか?

7
hansTheFranz

Kotlinのrecyclerviewに無限スクロール機能を追加するためにこの方法を使用します。

_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)
}
_

変数lastVisibleItemPositionは次のように宣言されます。

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

_private lateinit var scrollListener: RecyclerView.OnScrollListener
_

この機能をrecyclerViewに追加する必要があるたびに、setRecyclerViewScrollListener()メソッドを呼び出すだけです。

それが役に立てば幸い、

レオナルド

9
Leonardo Medori