代码之家  ›  专栏  ›  技术社区  ›  Best Best

科特林的SectionedRecyclServiceAdapter

  •  0
  • Best Best  · 技术社区  · 7 年前

    谁能把java代码重构成kotlin代码?

    这是我的密码

    食物适应性。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
        }
    }
    

    不吃东西。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<(原始)RecyclerView.ViewHolder!>?'的表达式'adapter'作为函数调用。找不到函数'invoke()'” 在recyclerView之后。适配器(部分适配器) 有人请指导我解决这个问题。 对不起,我英语不好

    0 回复  |  直到 7 年前
        1
  •  1
  •   Patrik Figura    7 年前
    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)
    }
    

    对于你的活动,你不需要上下文变量活动扩展上下文

    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 更地道

        2
  •  0
  •   CampbellMG    7 年前

    您正在尝试将类属性作为函数访问

    在Java中,您可以将适配器设置为:

    recyclerView.setAdapter(sectionAdapter)
    

    在科特林,这看起来像:

    recyclerView.adapter = sectionAdapter
    

    看一看 here 了解更多信息。