添加了界面及逻辑
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user