我需要一些帮助。 所以我需要从Firebase获取数据列表并将其放在水平recylerview中。下面是代码,我已经仔细检查了一下,代码返回了正确的数据。
private void loadtags() {
mDatabase.child("tags")
.orderByChild("total")
.limitToLast(8).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Tags> tagsmodel = new ArrayList<>();
for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {
Tags tags = userSnapshot.getValue(Tags.class);
tagsmodel.add(userSnapshot.getValue(Tags.class));
}
mAdaptertags.addAll(tagsmodel);
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "database error : " + databaseError);
}
});
}
以上代码产生了以下数据: tag10,tag2,tag5,tag6,pengumuman,编程,stikom,html
然后将数据放入recyclerview。下面是代码
mAdaptertags = new RecyclerViewAdapter_itemchiptags();
LinearLayoutManager mLayoutManagertags = new LinearLayoutManager(getActivity().getApplicationContext(), LinearLayoutManager.HORIZONTAL, true);
resekeltags.setLayoutManager(mLayoutManagertags);
resekeltags.setAdapter(mAdaptertags);
loadtags();
问题是,首先(在我滚动recylerview之前)数据的顺序是这样的: tag10,tag2,tag5,tag6,pengumuman,编程,stikom,html
在我滚动它之后,第一个数据tag10变成了html。
为什么变了?
更新 这是我的观看者代码
class MyViewHolder extends RecyclerView.ViewHolder {
Chip tagname;
MyViewHolder(View view) {
super(view);
tagname = (Chip) view.findViewById(R.id.item_chiptags);
}
public void setData(final Tags tag, int posisi) {
try {
color = MaterialPalettes.INSTANCE.getRandomColorByLevel(MaterialPalettes.INSTANCE.getLEVEL_700());
} catch (IllegalAccessException e) {
Log.d(TAG, "error warna : " + e);
e.printStackTrace();
}
if(posisi != tagsList.size()-1){
tagname.setChipText(tag.getKey()+" "+posisi);
tagname.changeBackgroundColor(ContextCompat.getColor(getApplicationContext(), color));}
}
}
这是我的适配器代码
public RecyclerViewAdapter_itemchiptags() {
this.tagsList = new ArrayList<>();
}
@Override
public RecyclerViewAdapter_itemchiptags.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(parent.getContext())
.inflate(R.layout.itemtags, parent, false));
}
@Override
public void onBindViewHolder(RecyclerViewAdapter_itemchiptags.MyViewHolder holder, int position) {
holder.setData(tagsList.get(position), position);
}
@Override
public int getItemCount() {
return tagsList.size();
}
public void addAll(List<Tags> tags) {
int initialSize = tagsList.size();
tagsList.addAll(tags);
notifyItemRangeInserted(initialSize, tags.size());
}
答案 0 :(得分:0)
尝试如下更改initialSize
public void addAll(List<Tags> tags) {
int initialSize = tagsList.size()+1; //change here
tagsList.addAll(tags);
notifyItemRangeInserted(initialSize, tags.size());
}
答案 1 :(得分:0)
问题在于以下几行:
if(posisi != tagsList.size()-1){
tagname.setChipText(tag.getKey()+" "+posisi);
tagname.changeBackgroundColor(ContextCompat.getColor(getApplicationContext(), color));}
}
在此条件仅在适配器到达最后一项时通过。 如果size = 10,则size-1 = 9:
(大小-1)!=位置或9!= 9