97 lines
3.7 KiB
Kotlin
97 lines
3.7 KiB
Kotlin
package com.sw.platecabinet.activity
|
|
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.LinearLayout
|
|
import android.widget.TextView
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.recyclerview.widget.GridLayoutManager
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
import androidx.recyclerview.widget.RecyclerView
|
|
import com.sw.platecabinet.R
|
|
import kotlin.math.ceil
|
|
|
|
class TestActivity : AppCompatActivity() {
|
|
private lateinit var parentRecyclerView: RecyclerView
|
|
private lateinit var pageAdapter: PageAdapter
|
|
private val itemsPerPage = 22 // 每行2个,每列11个,共22个
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(R.layout.activity_test)
|
|
|
|
parentRecyclerView = findViewById(R.id.parentRecyclerView)
|
|
parentRecyclerView.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
|
|
|
|
// 假设有100个数据项
|
|
val allItems = (1..30).map { "Item $it" }
|
|
val pages = allItems.chunked(itemsPerPage)
|
|
|
|
pageAdapter = PageAdapter(pages)
|
|
parentRecyclerView.adapter = pageAdapter
|
|
}
|
|
|
|
private fun convertToColumnFirst(original: List<String>, cols: Int): List<String> {
|
|
val rows = ceil(original.size.toDouble() / cols).toInt()
|
|
return List(original.size) { pos ->
|
|
val row = pos % rows
|
|
val col = pos / rows
|
|
val originalPos = col + row * cols
|
|
original.getOrElse(originalPos) { "" }
|
|
}
|
|
}
|
|
|
|
inner class PageAdapter(private val pages: List<List<String>>) :
|
|
RecyclerView.Adapter<PageAdapter.PageViewHolder>() {
|
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PageViewHolder {
|
|
val view = LayoutInflater.from(parent.context)
|
|
.inflate(R.layout.page_item_layout, parent, false)
|
|
return PageViewHolder(view)
|
|
}
|
|
|
|
override fun onBindViewHolder(holder: PageViewHolder, position: Int) {
|
|
holder.bind(pages[position])
|
|
}
|
|
|
|
override fun getItemCount(): Int = pages.size
|
|
|
|
inner class PageViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
|
private val childRecyclerView: RecyclerView =
|
|
itemView.findViewById(R.id.childRecyclerView)
|
|
|
|
fun bind(items: List<String>) {
|
|
childRecyclerView.layoutManager = GridLayoutManager(itemView.context, 2)
|
|
childRecyclerView.adapter = ChildAdapter(items)
|
|
}
|
|
}
|
|
}
|
|
|
|
inner class ChildAdapter(private val items: List<String>) :
|
|
RecyclerView.Adapter<ChildAdapter.ItemViewHolder>() {
|
|
|
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
|
|
val view = LayoutInflater.from(parent.context)
|
|
.inflate(R.layout.item_bind_view, parent, false)
|
|
return ItemViewHolder(view)
|
|
}
|
|
|
|
override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
|
|
holder.bind(position, items[position])
|
|
}
|
|
|
|
override fun getItemCount(): Int = items.size
|
|
|
|
inner class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
|
|
private val llRoot: LinearLayout = itemView.findViewById(R.id.ll_root)
|
|
private val tvNum: TextView = itemView.findViewById(R.id.tv_num)
|
|
|
|
fun bind(position: Int, item: String) {
|
|
tvNum.text = item
|
|
llRoot.setBackgroundResource(if (position % 3 == 0) R.drawable.grid_item_bind else R.drawable.grid_item_unbind)
|
|
}
|
|
}
|
|
}
|
|
} |