如何解决如何在Android中Recyclerview的onCreateViewHolder中更改特定LinearLayout子级的颜色
我想制作一个如上图所示的RecyclerView。
这种排名,只有排名前5位的颜色是动态红色。
,我制作了一个视图XML,其中有两个用于RecyclerView的ViewHolder的TextView。一个是数字,另一个是歌手的名字。
具体地说,我只想更改数字的颜色。
所以我想我可以通过使用LinearLayout找到它的孩子并取出一个特定的孩子。
我想在RecyclerView的适配器的onCreateViewHolder中更改子视图的颜色。
因为ViewHolder是在onCreateViewHolder方法中创建和膨胀的。
所以我认为我必须在onCreateViewHolder中更改视图的颜色。
但这并不容易和简单。
在onCreateViewHolder方法中,它返回Viewholder,但我制作了LinearLayout,
,我添加了一个更改其颜色的视图。我试图返回LinearLayout,
我知道这行不通,但我不知道该怎么做。
这是我的代码。
1.RecyclerView适配器
class SingerListAdapter(private val singers : ArrayList<Singer>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int {
return singers.size
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): RecyclerView.ViewHolder {
val layout = LinearLayout(parent.context)
val inflater = LayoutInflater.from(parent.context)
val viewGroup = inflater.inflate(R.layout.view_item,parent,false) as ViewGroup
//first child of viewGroup
val view = viewGroup.getChildAt(0) as TextView //the TextView of ranking number
view.setTextColor(ContextCompat.getColor(parent.context,R.color.red))
layout.addView(view)
return layout //i can't return linearLayout
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder,position: Int) {
}
class SingerViewHolder(view : View) : RecyclerView.ViewHolder(view) {
}
}
2.view XML
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:id="@+id/view_rank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="20sp"
android:textStyle="bold"
tools:hint="0" />
<TextView
android:id="@+id/view_singer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/view_rank"
app:layout_constraintTop_toTopOf="@id/view_rank"
app:layout_constraintBottom_toBottomOf="@id/view_rank"
android:layout_marginStart="10dp"
android:textSize="20sp"
tools:hint="ITZY"/>
</androidx.constraintlayout.widget.ConstraintLayout>
解决方法
尝试一下是否可行(我无法对其进行测试,因此,如果失败,我将删除我的帖子...只是将其写为评论很麻烦):
class SingerListAdapter(private val singers : ArrayList<Singer>) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun getItemCount(): Int {
return singers.size
}
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): SingerViewHolder {
val inflater = LayoutInflater.from(parent.context)
return SingerViewHolder(inflater,parent)
}
override fun onBindViewHolder(holder: SingerViewHolder,position: Int) {
if(position < 5) {
holder.rankTv.setTextColor(Color.RED)
}
else {
holder.rankTv.setTextColor(Color.BLACK)
}
}
class SingerViewHolder(view : View) : RecyclerView.ViewHolder(view) {
val rankTv = view.findViewById(R.id.view_rank)
}
}
无论是否奏效,基本思想是检查项目在onBindViewHolder
中的位置,如果它是< 5
(即它在您的前5名中),则得到{{1 }}作为TextView
中的排名,并更改其颜色。我不确定是否需要使用holder
情况。
编辑:大多数时候,除了标准内容外,您不必在else
和onCreateViewHolder
中进行任何操作。通常,您的工作会进入getItemCount
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。