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