Android 在回收器视图顶部闪烁

Android 在回收器视图顶部闪烁,android,android-recyclerview,Android,Android Recyclerview,我可以在顶部的回收器视图中看到闪烁。闪烁似乎类似于回收器视图item.xml中我的可绘制形状的顶行。我对线路和其他东西做了各种调整,看看是否可以防止闪烁,但似乎没有任何效果 这是我的密码 活动 <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas

我可以在顶部的回收器视图中看到闪烁。闪烁似乎类似于回收器视图item.xml中我的可绘制形状的顶行。我对线路和其他东西做了各种调整,看看是否可以防止闪烁,但似乎没有任何效果

这是我的密码

活动

<?xml version="1.0" encoding="utf-8"?>
<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="wrap_content"
    tools:context=".ScoreHistory">

    <TextView
        android:id="@+id/textView_history_title"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:gravity="center|center_horizontal|center_vertical"
        android:padding="5dp"
        android:text="@string/GameHistory_Title"
        android:textAlignment="gravity"
        android:textColor="@color/lime"
        android:textStyle="bold"
        app:autoSizeTextType="uniform"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/RV_scorehistory"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView_history_title" />


</androidx.constraintlayout.widget.ConstraintLayout>

My item.xml

<?xml version="1.0" encoding="utf-8"?>
<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="55dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:background="@drawable/rv_lines"
    android:gravity="center_vertical">

    <TextView
        android:id="@+id/TV_RV_ID"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_margin="0dp"
        android:gravity="center"
        android:textAlignment="center"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_DIFFICULTY"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/TV_RV_DIFFICULTY"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="2dp"
        android:gravity="center"
        android:textAlignment="center"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_ID"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_SUMTYPE"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="4"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_ID" />

    <TextView
        android:id="@+id/TV_RV_SUMTYPE"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="2dp"
        android:gravity="center"
        android:textAlignment="center"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_DIFFICULTY"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_OutOfText"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="3.5"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_DIFFICULTY" />

    <TextView
        android:id="@+id/TV_RV_OutOfText"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="2dp"
        android:gravity="center"
        android:text="@string/score_text"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_SUMTYPE"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_SCORE"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="2"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_SUMTYPE" />

    <TextView
        android:id="@+id/TV_RV_SCORE"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="6dp"
        android:gravity="center"
        android:textAlignment="center"
        android:textStyle="bold"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_OutOfText"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_QCOUNT_TEXT"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="1.5"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_OutOfText" />

    <TextView
        android:id="@+id/TV_RV_QCOUNT_TEXT"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="2dp"
        android:gravity="center"
        android:text="@string/questions_text"
        android:textAlignment="gravity"
        android:textStyle="bold"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_SCORE"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_QCOUNT"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight=".75"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_SCORE" />

    <TextView
        android:id="@+id/TV_RV_QCOUNT"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_marginStart="2dp"
        android:background="@drawable/target_icon"
        android:gravity="center"
        android:textAlignment="center"
        android:textStyle="bold"
        app:layout_constraintBaseline_toBaselineOf="@+id/TV_RV_QCOUNT_TEXT"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="1.5"
        app:layout_constraintStart_toEndOf="@+id/TV_RV_QCOUNT_TEXT" />
</androidx.constraintlayout.widget.ConstraintLayout>

我在适配器中设置了后台资源

class ScoreHistoryAdaptor : ListAdapter<SavedScores, ScoreHistoryAdaptor.SavedScoreViewHolder>(WordsComparator()) {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SavedScoreViewHolder {
        return SavedScoreViewHolder.create(parent)
    }

    override fun onBindViewHolder(holder: SavedScoreViewHolder, position: Int) {
        val current = getItem(position)
        holder.bind(current.id,current.difficulty,current.sumtype,current.questioncount,current.answeredcorrectly)
    }

    class SavedScoreViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val IDItemView: TextView = itemView.findViewById(R.id.TV_RV_ID)
        private val DiffultyItemView: TextView = itemView.findViewById(R.id.TV_RV_DIFFICULTY)
        private val SumTypeItemView: TextView = itemView.findViewById(R.id.TV_RV_SUMTYPE)
        private val qCountItemView: TextView = itemView.findViewById(R.id.TV_RV_QCOUNT)
        private val ScoreItemView: TextView = itemView.findViewById(R.id.TV_RV_SCORE)
        private var DIFFCODE = ""
        private var SUMTYPECODE = ""
        val myContext = SumTypeItemView.context
        fun bind(ID: Int?,DIFFICULTY:String?,SUMTYPE:String?,QC:Int?,SCORE:Int?) {
            IDItemView.text = ID.toString()
            when (DIFFICULTY) {
                myContext.resources.getString(R.string.diffLVL1) -> {DIFFCODE = DIFFICULTY; DiffultyItemView.setBackgroundResource(R.drawable.diff_easy_icon)}
                myContext.resources.getString(R.string.diffLVL2) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_normal_icon)}
                myContext.resources.getString(R.string.diffLVL3) -> {DIFFCODE = DIFFICULTY; DiffultyItemView.setBackgroundResource(R.drawable.diff_hard_icon) }
                myContext.resources.getString(R.string.diffLVL4) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_impossible_icon)}
                myContext.resources.getString(R.string.random) -> {DIFFCODE = DIFFICULTY ; DiffultyItemView.setBackgroundResource(R.drawable.diff_random_icon)}
            }

            DiffultyItemView.text = DIFFCODE
            when (SUMTYPE) {
                myContext.resources.getString(R.string.catMulti) -> {SUMTYPECODE = myContext.resources.getString(R.string.multi_symbol) }
                myContext.resources.getString(R.string.catAdd) -> {SUMTYPECODE = myContext.resources.getString(R.string.add_symbol)}
                myContext.resources.getString(R.string.catSub) -> {SUMTYPECODE = myContext.resources.getString(R.string.sub_symbol)}
                myContext.resources.getString(R.string.catDiv) -> {SUMTYPECODE = myContext.resources.getString(R.string.div_symbol)}
                myContext.resources.getString(R.string.catSqrR) -> {SUMTYPECODE = myContext.resources.getString(R.string.sqr_symbol) + "n"}
                myContext.resources.getString(R.string.catSqrD) -> {SUMTYPECODE = "n" + myContext.resources.getString(R.string.sqrd_symbol)}
                myContext.resources.getString(R.string.catCubeR) -> {SUMTYPECODE = myContext.resources.getString(R.string.cuber_symbol) + "n"}
                myContext.resources.getString(R.string.catCubeD) -> {SUMTYPECODE = "n" + myContext.resources.getString(R.string.cubed_symbol)}
                myContext.resources.getString(R.string.random) -> {SUMTYPECODE = myContext.resources.getString(R.string.random)}
            }
            when (IsScoreLessThanTarget(SCORE!!.toInt(),QC!!.toInt())){
                true ->{ScoreItemView.setBackgroundResource(R.drawable.somewrong_icon)}
                false ->{ScoreItemView.setBackgroundResource(R.drawable.allcorrect_icon)}
            }
            SumTypeItemView.setBackgroundResource(R.drawable.sumtype_icon)
            SumTypeItemView.text = SUMTYPECODE
            qCountItemView.text = QC.toString()
            ScoreItemView.text = SCORE.toString()
        }



        companion object {
            fun create(parent: ViewGroup): SavedScoreViewHolder {
                val view: View = LayoutInflater.from(parent.context)
                    .inflate(R.layout.row_item, parent, false)
                return SavedScoreViewHolder(view)
            }
        }
    }

    class WordsComparator : DiffUtil.ItemCallback<SavedScores>() {
        override fun areItemsTheSame(oldItem: SavedScores, newItem: SavedScores): Boolean {
            return oldItem.id == newItem.id
        }

        override fun areContentsTheSame(oldItem: SavedScores, newItem: SavedScores): Boolean {
            return oldItem == newItem
        }
    }
}
private fun IsScoreLessThanTarget(score:Int,target:Int): Boolean{
    return score < target
}
class ScoreHistoryAdapter:ListAdapter(WordsComparator()){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):SavedCoreViewHolder{
返回SavedCoreViewHolder.create(父级)
}
覆盖BindViewHolder(holder:SavedCoreViewHolder,位置:Int){
val current=getItem(位置)
holder.bind(current.id、current.defficiency、current.sumtype、current.questioncount、current.answeredcorrect)
}
类savedCoreViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
private val IDItemView:TextView=itemView.findViewById(R.id.TV_RV_id)
private val DiffultyItemView:TextView=itemView.findViewById(R.id.TV\u RV\u难度)
私有val SumTypeItemView:TextView=itemView.findViewById(R.id.TV\U RV\U SUMTYPE)
private val qCountItemView:TextView=itemView.findviewbyd(R.id.TV\u RV\u QCOUNT)
私有val ScoreItemView:TextView=itemView.findViewById(R.id.TV\U RV\U分数)
private var DIFFCODE=“”
私有变量SUMTYPECODE=“”
val myContext=SumTypeItemView.context
趣味绑定(ID:Int?,难度:String?,SUMTYPE:String?,QC:Int?,分数:Int?){
IDItemView.text=ID.toString()
何时(困难){
myContext.resources.getString(R.string.diffLVL1)->{DIFFCODE=难度;DiffultyItemView.setBackgroundResource(R.drawable.diff\u easy\u图标)}
myContext.resources.getString(R.string.diffLVL2)->{DIFFCODE=难度;DiffultyItemView.setBackgroundResource(R.drawable.diff\u普通图标)}
myContext.resources.getString(R.string.diffLVL3)->{DIFFCODE=defessure;DiffultyItemView.setBackgroundResource(R.drawable.diff_hard_icon)}
myContext.resources.getString(R.string.diffLVL4)->{DIFFCODE=难度;DiffultyItemView.setBackgroundResource(R.drawable.diff_图标)}
myContext.resources.getString(R.string.random)->{DIFFCODE=难度;DiffultyItemView.setBackgroundResource(R.drawable.diff\u random\u图标)}
}
DiffultyItemView.text=DIFFCODE
何时(SUMTYPE){
myContext.resources.getString(R.string.catMulti)->{SUMTYPECODE=myContext.resources.getString(R.string.multi_symbol)}
myContext.resources.getString(R.string.catAdd)->{SUMTYPECODE=myContext.resources.getString(R.string.add_symbol)}
myContext.resources.getString(R.string.catSub)->{SUMTYPECODE=myContext.resources.getString(R.string.sub_symbol)}
myContext.resources.getString(R.string.catDiv)->{SUMTYPECODE=myContext.resources.getString(R.string.div_symbol)}
myContext.resources.getString(R.string.catSqrR)->{SUMTYPECODE=myContext.resources.getString(R.string.sqr_符号)+“n”}
myContext.resources.getString(R.string.catSqrD)->{SUMTYPECODE=“n”+myContext.resources.getString(R.string.sqrd_symbol)}
myContext.resources.getString(R.string.catCubeR)->{SUMTYPECODE=myContext.resources.getString(R.string.cuber_symbol)+“n”}
myContext.resources.getString(R.string.catCubeD)->{SUMTYPECODE=“n”+myContext.resources.getString(R.string.cubed_symbol)}
myContext.resources.getString(R.string.random)->{SUMTYPECODE=myContext.resources.getString(R.string.random)}
}
当(ISSCORELESSTOANTARGET(分数!!.toInt(),质量控制!!.toInt()){
true->{ScoreItemView.setBackgroundResource(R.drawable.SomeError_图标)}
false->{ScoreItemView.setBackgroundResource(R.drawable.allcorrect_图标)}
}
SumTypeItemView.setBackgroundResource(R.drawable.sumtype_图标)
SumTypeItemView.text=SUMTYPECODE
qCountItemView.text=QC.toString()
ScoreItemView.text=SCORE.toString()
}
伴星{
趣味创建(父:视图组):SavedCoreViewHolder{
val view:view=LayoutInflater.from(parent.context)
.充气(R.layout.row_项目,父项,假)
返回保存的CoreViewHolder(视图)
}
}
}
类WordsComparator:DiffUtil.ItemCallback(){
覆盖乐趣项相同(旧项:SavedScores,新项:SavedScores):布尔值{
返回oldItem.id==newItem.id
}
覆盖内容相同(旧项:SavedCores,新项:SavedCores):布尔值{
返回oldItem==newItem
}
}
}
private fun IsScoreLessThanTarget(分数:Int,目标:Int):布尔值{
返回分数<目标
}

在另一个使用scrollview的视图中,我得到了相同的结果


您的问题之所以出现,是因为您的
my\u item.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="55dp" <---- Fixed Height
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:background="#ae7f9c"
    android:gravity="center_vertical">

添加您所看到内容的屏幕截图@Harsh0021添加了图片。当你滚动它时,它会闪烁,正如我上面所说的,它类似于项目中可绘制的顶部。你说的闪烁是什么意思。你能给我简要介绍一下吗?@Harsh0021当你滚动它的时候,你能看到的线会闪烁。迅速出现和消失。像一个闪烁。我无法更好地描述它,因为flicker是用来描述它的一个词,而且它不一定是通过快速滚动来实现的。我一次只能滚动一毫米,但它仍然会闪烁,尝试给顶部的“回收者”视图添加一些填充
<TextView
        android:id="@+id/TV_RV_ID"
        android:layout_width="0dp"
        android:layout_height="match_parent"  <------ this hiding the background try using wrap_content
        android:layout_margin="0dp"
        android:gravity="center"
        android:textAlignment="center"
        app:layout_constraintEnd_toStartOf="@+id/TV_RV_DIFFICULTY"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintHorizontal_weight="1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />