0

我的 RecycleView 中有 item_history,我想在我的 Adapter(RecycleView) 中改变它们的颜色,比如

  1. 一白
  2. 一灰
  3. 一白
  4. 一灰
  5. 一白
  6. 一灰
  7. 一白

但也有 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
    }

}
4

0 回答 0