You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何默认高亮Kotlin编写的RecyclerView前4个条目?

How to Highlight the First 4 RecyclerView Items on Load (Kotlin)

Hey there! Let's walk through how to automatically highlight the first 4 items in your RecyclerView once it finishes loading—perfect for your setup where data comes from a backend as an ArrayList in body.data. Here's a straightforward, maintainable approach:

Step 1: Add Highlight Tracking to Your Adapter

First, we'll add a mutable set to your Adapter to keep track of which positions should be highlighted. This makes it easy to update and check the highlight state as needed:

class YourAdapter(private val dataList: ArrayList<YourDataType>) : RecyclerView.Adapter<YourAdapter.YourViewHolder>() {
    // Track positions that need highlighting
    private val highlightedPositions = mutableSetOf<Int>()

    inner class YourViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        // Initialize your views here (adjust to match your layout)
        val itemContainer: View = itemView.findViewById(R.id.item_container)
        // ... add other views like text, images, etc.
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YourViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.your_item_layout, parent, false)
        return YourViewHolder(view)
    }

    override fun onBindViewHolder(holder: YourViewHolder, position: Int) {
        val item = dataList[position]
        // Bind your backend data to views as usual
        // ...

        // Apply highlight or normal style based on position
        if (position in highlightedPositions) {
            holder.itemContainer.setBackgroundColor(ContextCompat.getColor(holder.itemView.context, R.color.highlight_blue))
        } else {
            holder.itemContainer.setBackgroundColor(ContextCompat.getColor(holder.itemView.context, R.color.default_white))
        }
    }

    override fun getItemCount(): Int = dataList.size

    // Update highlighted positions and refresh affected items
    fun setHighlightedPositions(positions: Collection<Int>) {
        highlightedPositions.clear()
        highlightedPositions.addAll(positions)
        notifyItemRangeChanged(0, positions.size)
    }
}

Step 2: Trigger Highlight After Data Load & Layout

Since your data comes from the backend, we need to wait until two things are done:

  1. The backend data is fetched and passed to the Adapter
  2. The RecyclerView finishes laying out its items (to ensure the first 4 are ready to style)

In your Activity/Fragment where you set up the RecyclerView:

// After fetching data from the backend
val backendData = body.data
val adapter = YourAdapter(backendData)
recyclerView.adapter = adapter

// Wait for RecyclerView to finish layout, then highlight first 4 items
recyclerView.addOnLayoutChangeListener(object : View.OnLayoutChangeListener {
    override fun onLayoutChange(v: View?, left: Int, top: Int, right: Int, bottom: Int, oldLeft: Int, oldTop: Int, oldRight: Int, oldBottom: Int) {
        // Remove the listener after first run to avoid repeated triggers
        recyclerView.removeOnLayoutChangeListener(this)
        
        // Highlight up to 4 items (or fewer if there's less data)
        val highlightCount = minOf(4, adapter.itemCount)
        val positionsToHighlight = (0 until highlightCount).toList()
        adapter.setHighlightedPositions(positionsToHighlight)
    }
})

Step 3: Handle ViewHolder Reuse (Critical!)

RecyclerView reuses ViewHolders as you scroll, so our onBindViewHolder logic ensures every time a holder is bound, it checks if the position should be highlighted. This prevents incorrect highlighting when scrolling back to previously viewed items.

Optional: Keep Highlight on Scroll

If you want the first 4 items to stay highlighted even after scrolling away and back, the current setup already handles this—since we're tracking positions in the Adapter's state, the highlight will reappear whenever those items come back into view.


内容的提问来源于stack exchange,提问作者Logan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:22:44