【发布时间】: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