我的recycleverview出现问题。我正在从Firebase中检索一个列表,并且在进行每次迭代时都会重新创建此列表。我的目标是应该打印出列表中所有单独的项目。
这是我的Recyclerview适配器
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): ItemsViewHolder {
val view = LayoutInflater.from(viewGroup.context)
.inflate(R.layout.card_view_fragment, viewGroup, false)
addItems(itemsList)
return ItemsViewHolder(view)
}
override fun onBindViewHolder(viewHolder: ItemsViewHolder, postion: Int) {
viewHolder.bindView(itemsList[postion])
}
override fun getItemCount(): Int {
return itemsList.count()
}
fun addItems(items: List<Items>) {
itemsList.addAll(items)
}
如果需要,我可以提供更多代码
Shermano请求更新
fun getEanItems(eanCode: ArrayList<String?>) {
val service = RetrofitInstance().getRetrofitInstance().create(getItemApi::class.java)
GlobalScope.launch(Dispatchers.Main) {
repeat(eanCode.size) { count ->
val call = service.getItemsData(eanCode[count].toString())
delay(500)
call.enqueue(object : Callback<ItemsList> {
override fun onFailure(call: Call<ItemsList>, t: Throwable) {
Toast.makeText(context, "Could not fetch data", Toast.LENGTH_LONG).show()
}
override fun onResponse(call: Call<ItemsList>, response: Response<ItemsList>) {
Log.i(TAG, response.body().toString())
Toast.makeText(context, response.toString(), Toast.LENGTH_SHORT).show()
response.body()?.getitemsArrayList()?.let { generateItemsList(it) }
fun generateItemsList(getitemsArrayList: ArrayList<Items>) {
recyclerView?.apply {
layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)
setHasFixedSize(true)
adapter = ItemsAdapter(getitemsArrayList)
}
}
我可能是盲人,但是我在这段代码中看不到我适合该addItems的位置,我有点卡住了我的adapter = ItemsAdapter(getitemsArrayList)
答案 0 :(得分:0)
问题在onCreateViewHolder
方法中,您已经在其中编写了addItems()
方法。
我建议您参考文档,以下是摘录:
VH onCreateViewHolder (ViewGroup parent,
int viewType)
当RecyclerView需要新的给定类型的RecyclerView.ViewHolder来表示商品时调用。
此新的ViewHolder应该使用可以代表给定类型的项目的新View构造。您可以手动创建一个新视图,也可以从XML布局文件中对其进行充气。
新的ViewHolder将用于通过onBindViewHolder(ViewHolder,int,List)显示适配器的项目。由于将其重新用于显示数据集中的不同项目,因此最好将对引用的引用的缓存存储在视图的子视图中,以避免不必要的findViewById(int)调用。
关于添加项目: 我想说,您应该从要在列表中添加项目的位置调用ReItemerView中的addItems方法。
我想说的是,您还应该在适配器类中编写的addItems方法下面添加以下行:
mAdapter.notifyItemRangeInserted(startPosition, itemcount);
答案 1 :(得分:0)
在调用时,您正在传递项目列表addItems(itemsList)
和内部方法定义..您正在将相同列表的项目添加到自身中。
答案 2 :(得分:0)
现在可以正常工作了,谢谢大家给我正确方向的答复:)
public function User()
{
return $this->hasOne('App\User','id','user_id');
}
public function Category()
{
return $this->hasOne('App\Category','id','category_id');
}
public function Tags()
{
return $this->hasMany('App\Tags ','link_id','id');
}