我的 RecycleView 中有 item_history,我想在我的 Adapter(RecycleView) 中改变它们的颜色,比如
- 一白
- 一灰
- 一白
- 一灰
- 一白
- 一灰
- 一白
但也有 item_history_head (日期),当我使用
if (position % 2 == 0)
和
holder.itemView.setBackgroundColor.....
它也计算 item_history_head 。你可以看到它 在这里计算它们图片
我的代码:
class HistoryAdapter(
val context: Context,
private val dataSet: List<Any>,
private val onClickListener: View.OnClickListener
) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
if (viewType == HEAD_TYPE) {
return HistoryHeadViewHolder(
LayoutInflater.from(parent.context)
.inflate(R.layout.item_history_head, parent, false)
)
} else {
return HistoryBodyViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.item_history, parent, false)
)
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val data = dataSet.get(position)
if (data is HistoryModel) {
bindHistoryBody(holder as HistoryBodyViewHolder, data)
if(position % 2 == 0){
holder.itemView.setBackgroundColor(ContextCompat.getColor(context,R.color.lightGrey))
}//We shouldn't use else for white, 'cause if we will realize dark theme, it will be white!!!
//or we can use ColorPrimary which changes while changing theme of UI
} else if (data is String) {
bindHistoryHead(holder as HistoryHeadViewHolder, data)
}
}
override fun getItemCount(): Int {
return dataSet.size
}
override fun getItemViewType(position: Int): Int {
if (dataSet.get(position) is HistoryModel) return BODY_TYPE
else return HEAD_TYPE
}
private fun bindHistoryHead(holder: HistoryHeadViewHolder, date: String) {
holder.textView.text = date
}
private fun bindHistoryBody(holder: HistoryBodyViewHolder, data: HistoryModel) {
holder.textViewTitle.text = data.category
holder.textViewSubTitle.text = data.note
when (data.type) {
else -> {
holder.textViewAmount.text = "+ " + data.amount + " " + data.currency
}
}
try {
val inputStream: InputStream = context.getAssets().open("icons/" + data.icon)
val image = Drawable.createFromStream(inputStream, null)
holder.imageViewIcon.setImageDrawable(image)
holder.itemView.tag = data
holder.itemView.setOnClickListener(onClickListener)
} catch (ex: Exception) {
ex.message?.let {
Log.e(HistoryFragment::class.java.simpleName, it)
}
}
}
class HistoryBodyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textViewTitle: TextView = itemView.findViewById(R.id.textViewTitle) as TextView
var textViewSubTitle: TextView = itemView.findViewById(R.id.textViewSubTitle) as TextView
var textViewAmount: TextView = itemView.findViewById(R.id.textViewAmount) as TextView
var imageViewIcon: ImageView = itemView.findViewById(R.id.imageViewIcon) as ImageView
}
class HistoryHeadViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textView: TextView = itemView.findViewById(R.id.textView) as TextView
}
companion object {
const val HEAD_TYPE = 0
const val BODY_TYPE = 1
}
}