首页 > 解决方案 > 为什么回收站视图中的第一个元素显示不正确?

问题描述

现在我正在写我的小游戏“Bulls and Cows”。我添加到布局回收器视图的底部并编写示例代码来测试它:

val adapter = MyAdapter(this, null)
turnStory.adapter = adapter
repeat(100) {
adapter.updateData(Triple("test$it", "test$it", "test$it")
}

我在电话上开始了我的活动并看到了

但是当我向下滚动并向后滚动时,一切都变得正常了

我的适配器.kt

class MyAdapter(private val ctx: Context, private val data: Triple<String, String, String>?) :
    RecyclerView.Adapter<MyAdapter.MyViewHolder>() {

private val dataset = mutableListOf<Triple<String, String, String>>()
init {
    if (data != null) dataset.add(data)
}

class MyViewHolder(val frameLayout: FrameLayout) : RecyclerView.ViewHolder(frameLayout)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
    val frameLayout = LayoutInflater.from(parent.context)
        .inflate(R.layout.frame_layout, parent, false) as FrameLayout

    return MyViewHolder(frameLayout)
}

override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
    holder.frameLayout.numberView.text = dataset[position].first

    holder.frameLayout.bullsView.text =
        ctx.resources.getString(R.string.bulls_counter, dataset[position].second)
    holder.frameLayout.cowsView.text =
        ctx.resources.getString(R.string.cows_counter, dataset[position].third)
}

override fun getItemCount(): Int = dataset.size

fun updateData(data: Triple<String, String, String>) {
    dataset.add(data)
    notifyDataSetChanged()
}

}

frame_layout.xml

<FrameLayout 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="100dp">

<TextView
    android:id="@+id/numberView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="center_vertical"
    android:gravity="center"
    android:maxLines="1"
    android:singleLine="false"
    android:textColor="#000000"
    android:textSize="36sp"
    android:textStyle="bold"
    app:autoSizeTextType="none" />

<TextView
    android:id="@+id/bullsView"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:layout_gravity="end"
    android:gravity="center"
    android:maxLines="1"
    android:singleLine="false"
    android:textColor="#000000"
    android:textSize="24sp" />

<TextView
    android:id="@+id/cowsView"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:layout_gravity="bottom|end"
    android:gravity="center"
    android:maxLines="1"
    android:singleLine="false"
    android:textColor="#000000"
    android:textSize="24sp" />

为什么在我向下滚动之前回收站视图中的第一个元素显示不正确?

computer_game_activity.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".GameComputerActivity">

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/turnStory"
    android:layout_width="0dp"
    android:layout_height="500dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

标签: androidkotlinandroid-recyclerview

解决方案


推荐阅读