[英]SectionedRecyclerViewAdapter in kotlin
任何人都可以將 java 代碼重構為 kotlin 代碼?
這是我的代碼
FoodListAdapter.kt
class FoodListAdapter: StatelessSection(SectionParameters.builder()
.itemResourceId(R.layout.content_food_list)
.headerResourceId(R.layout.header_food_list)
.build()) {
val itemList = arrayListOf<Int>(1, 2, 3 ,4)
override fun getContentItemsTotal(): Int {
return itemList.size
}
override fun onBindItemViewHolder(holder: RecyclerView.ViewHolder?, position: Int) {
val itemHolder = holder as MyItemViewHolder
// bind your view here
itemHolder.tvItem.setText(itemList[position])
}
override fun getItemViewHolder(view: View?): RecyclerView.ViewHolder {
return MyItemViewHolder(view!!)
}
}
class MyItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
lateinit var tvItem: TextView
init {
tvItem = itemView.findViewById(R.id.txtItem) as TextView
}
}
FoodListActivity.kt
class FoodActivity : AppCompatActivity() {
private var context: Context? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_food_list)
context = this
val sectionAdapter = SectionedRecyclerViewAdapter()
// Add your Sections
sectionAdapter.addSection(FoodListAdapter())
// Set up your RecyclerView with the SectionedRecyclerViewAdapter
val recyclerView = findViewById(R.id.foodList) as RecyclerView
recyclerView.setLayoutManager(LinearLayoutManager(context))
recyclerView.adapter(sectionAdapter)
}
}
我遇到的問題是“'RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!> 類型的表達式'適配器'?” 不能作為函數調用。在 recyclerView.adapter(sectionAdapter) 之后找不到函數“invoke()”“有人請指導我解決這個問題。 抱歉我英語不好
class FoodListAdapter(val itemList): StatelessSection(SectionParameters.builder()
.itemResourceId(R.layout.content_food_list)
.headerResourceId(R.layout.header_food_list)
.build()) {
override fun getContentItemsTotal(): Int {
return itemList.size
}
override fun onBindItemViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val itemHolder = holder as MyItemViewHolder
itemHolder.tvItem.setText(itemList[position])
}
override fun getItemViewHolder(view: View?): RecyclerView.ViewHolder {
return MyItemViewHolder(view!!)
}
}
class MyItemViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
internal val tvItem: TextView =itemView.findViewById(R.id.txtItem)
}
對於您的活動,您不需要上下文變量 Activity extends Context
class FoodActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_food_list)
val sectionAdapter = SectionedRecyclerViewAdapter()
val itemList = arrayListOf<Int>(1, 2, 3 ,4)
sectionAdapter.addSection(FoodListAdapter(itemList))
val recyclerView:RecyclerView = findViewById(R.id.foodList)
recyclerView.layoutManager = LinearLayoutManager(context)
recyclerView.adapter = sectionAdapter
}
}
正如@CampbellMG 提到的,您需要使用recyclerView.adapter = sectionAdapter
或recyclerView.setAdapter(sectionAdapter)
recyclerView.adapter=sectionAdapter
更慣用
您正在嘗試將類屬性作為函數訪問
在 Java 中,您可以使用以下內容設置適配器:
recyclerView.setAdapter(sectionAdapter)
在 Kotlin 中,這看起來像:
recyclerView.adapter = sectionAdapter
在這里查看更多信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.