[英]SectionedRecyclerViewAdapter in kotlin
Anyone can refactor java code to kotlin code ?任何人都可以将 java 代码重构为 kotlin 代码?
this is my code这是我的代码
FoodListAdapter.kt 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 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)
}
}
I got a problem is "Expression 'adapter' of type 'RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!>?'我遇到的问题是“'RecyclerView.Adapter<(raw) RecyclerView.ViewHolder!> 类型的表达式'适配器'?” cannot be invoked as a function. The function 'invoke()' is not found" after recyclerView.adapter(sectionAdapter) Someone please guide me to fix this.
不能作为函数调用。在 recyclerView.adapter(sectionAdapter) 之后找不到函数“invoke()”“有人请指导我解决这个问题。 sorry i not good at english
抱歉我英语不好
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)
}
And for your activity you don't need context variable Activity extends Context对于您的活动,您不需要上下文变量 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
}
}
as @CampbellMG mentioned you need to either use recyclerView.adapter = sectionAdapter
or recyclerView.setAdapter(sectionAdapter)
正如@CampbellMG 提到的,您需要使用
recyclerView.adapter = sectionAdapter
或recyclerView.setAdapter(sectionAdapter)
recyclerView.adapter=sectionAdapter
is more idiomatic recyclerView.adapter=sectionAdapter
更惯用
You are trying to access a class property as a function您正在尝试将类属性作为函数访问
In Java you would set the adapter with:在 Java 中,您可以使用以下内容设置适配器:
recyclerView.setAdapter(sectionAdapter)
In Kotlin this looks like:在 Kotlin 中,这看起来像:
recyclerView.adapter = sectionAdapter
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.