【问题标题】:How to add an item to a list to show all items in kotlin?如何将项目添加到列表以显示 kotlin 中的所有项目?
【发布时间】:2021-07-04 11:10:35
【问题描述】:

我有一个列表,显示数据取决于您选择的列表 我从 API 获取这个列表,但这里的问题是 API 列表没有提供“全部”来显示列表中的所有内容

代码:

 val findercatService = findercatService.create().getServices()
    findercatService.enqueue(object : Callback<List<ilmcategoriesData>> {
        override fun onResponse(
            call: Call<List<ilmcategoriesData>>?,
            response: Response<List<ilmcategoriesData>>?
        ) {
            var list = response?.body()!!

   

            Log.e("XXimmmm2XXwwwww", list.toString())
            // recyclerView3.adapter = ilmcategoriesAdapter(list, MainActivity())
            recyclerView3.adapter =
                ilmcategoriesAdapter(list, MainActivity(), object : ilmcategoriesAdapter.OnClickRecyclerChild {
                    override fun myCallback(s: String?) {

                        Log.e("fsds","5454556666")
                        Log.d(TAG, s!!)

                        when (s.toInt()) {
                            26 -> AppPreferences.heightInCentimeters = 1
                            27 -> AppPreferences.heightInCentimeters = 2
                            28 -> AppPreferences.heightInCentimeters = 3
                            29 -> AppPreferences.heightInCentimeters = 4
                            30 -> AppPreferences.heightInCentimeters = 5
                            31 -> AppPreferences.heightInCentimeters = 6
                            32 -> AppPreferences.heightInCentimeters = 7
                            33 -> AppPreferences.heightInCentimeters = 8
                            34 -> AppPreferences.heightInCentimeters = 9
                            35 -> AppPreferences.heightInCentimeters = 10
                            36 -> AppPreferences.heightInCentimeters = 11
                            37 -> AppPreferences.heightInCentimeters = 12
                            38 -> AppPreferences.heightInCentimeters = 13
                            39 -> AppPreferences.heightInCentimeters = 14
                            else -> { // Note the block
                               AppPreferences.heightInCentimeters = 0
                            }
                        }

                      

                    
                        val finderService = finderService.create().getServices()
                        finderService.enqueue(object : Callback<List<ilmFinders>> {
                            override fun onResponse(
                                call: Call<List<ilmFinders>>?,
                                response: Response<List<ilmFinders>>?
                            ) {
                                val list = response?.body()!!

                                var newAdapter = IimfinderAdapter(list, MainActivity())
                                Log.e("XXimmmm2XX", list.count().toString())
                                recyclerView6.adapter = IimfinderAdapter(list, MainActivity())

                                newAdapter.notifyDataSetChanged()
                            }

                            override fun onFailure(call: Call<List<ilmFinders>>?, t: Throwable?) {
                                Log.e("dsfdfs", "daily")
                            }
                        })




                    }
                })
        }

我尝试了这个问题的解决方案: How to add an item to a list in Kotlin?

并添加了这个:

     val original = ilmcategoriesData(0, "All")
     list.toMutableList().add(original)

但它不起作用,我做错了什么?

这是适配器:

class ilmcategoriesAdapter(var countryList: List<ilmcategoriesData>, var activity: MainActivity, var listener: OnClickRecyclerChild): RecyclerView.Adapter<ilmcategoriesAdapter.ViewHolder>(){
lateinit var context: Context

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ilmcategoriesAdapter.ViewHolder {
    context = parent.context!!
    val view = LayoutInflater.from(context).inflate(R.layout.list_item3, parent, false)
    return ViewHolder(view)
}

override fun getItemCount(): Int {
    return countryList.size
}

override fun onBindViewHolder(holder: ilmcategoriesAdapter.ViewHolder, position: Int) {



    holder.eventName.text = countryList[position].name
    Log.d("ggggggggggggggg", countryList.toString())

    holder.eventName.setOnClickListener {


      var CategoryID =   countryList[position].id
        var CategoryIdStr = CategoryID.toString()

        Log.e("fsds","fdfsd32")

        AppPreferences.heightInCentimeters = CategoryID
        listener.myCallback(CategoryIdStr)
    }



}

class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView){
    val eventName: TextView = itemView.findViewById(R.id.cat_title)


}



interface OnClickRecyclerChild {
    fun myCallback(s: String?)


}

}

和数据类:

class ilmcategoriesData (
val id: Int,
val name: String
    )

【问题讨论】:

  • 我不确定您在第一个代码示例中遇到的问题。但是关于这个:list.toMutableList().add(original),请记住这会创建一个 new 列表并添加 original。所以list 不会被修改。
  • 那么将项目添加到列表的正确方法是什么?
  • 如果它是一个非可变列表,那么你就是不能添加一个项目,你只能复制并添加一个项目。如果没有任何问题代码,就很难确定。
  • 我认为我可以通过该代码来做到这一点,我已将适配器和数据类添加到我的问题中
  • 您可以将countryList 设置为您的新列表。但是,我仍然看不到您要在示例中添加 original 元素的位置。如果您需要更多帮助,您可以提供minimal reproducible example,我很乐意看看!

标签: java android list api kotlin


【解决方案1】:

适配器中的解决方案:

init {
    val arrayList = ArrayList<ilmcategoriesData>()
    arrayList.addAll(countryList)
    arrayList.add(0, ilmcategoriesData(41, "All Categories"))
    arrayList.add(1, ilmcategoriesData(42, "Favorite"))
    countryList = arrayList
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 2019-11-26
    • 2018-04-04
    • 2023-01-16
    • 1970-01-01
    相关资源
    最近更新 更多