我正在使用Firebase作为我的后端。我正在使用recyclerview来显示用户列表。我已经实现了这一点,但现在我现在只想根据JSON中的“类别”显示一些用户。当我在没有gridview的情况下显示列表时,当我尝试在gridview中显示列表时,它正常工作我看到空格代替我删除的用户。
下面是代码。我的GridRecylerview
mFragmentChatsBinding.rvChats.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
mFragmentChatsBinding.rvChats.setLayoutManager(mLayoutManager);
我的JSON回复
{"xxxxx@gmail,com":{
"category":"admin",
"email":"xxxx@gmail,com",
"hasLoggedInWithPassword":false,
"name":"xxxx"},
"yyyy@gmail,com":{
"category":"user",
"email":"yyyy@gmail,com",
"hasLoggedInWithPassword":false,
"name":"yyy",}}
我的Recyclerview代码
private void initializeFirebase() {
final Query refUsers = FirebaseDatabase.getInstance()
.getReference(ConstantsFirebase.FIREBASE_LOCATION_USERS);
refUsers.keepSynced(true);
mAdapter = new FirebaseRecyclerAdapter<User, ChatsItemHolder>(User.class, R.layout.adapter_item_chats,
ChatsItemHolder.class, refUsers) {
@Override
public ChatsItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
adapterItemChatsBinding = DataBindingUtil.inflate(LayoutInflater
.from(parent.getContext()), viewType, parent, false);
//adapterItemChatsBinding.tvUserName.setTypeface(Typefaces.get(getActivity(), Constants.FONT_ROBOT_REGULAR));
return new ChatsItemHolder(adapterItemChatsBinding);
}
@Override
protected void populateViewHolder(ChatsItemHolder viewHolder, User user, int position) {
if (user.getCategory().equals("admin")) {
viewHolder.setIsRecyclable(false); viewHolder.mAdapterItemChatsBinding.lnItemRow.removeAllViews(); viewHolder.mAdapterItemChatsBinding.lnItemRow.setPadding(0, 0, 0, 0);
} else {
viewHolder.bindUser(user, ChatsFragment.this);
}
mAdapter.notifyDataSetChanged();
}
我使用以下代码不显示我想要的用户
if (user.getCategory().equals("admin")) {
viewHolder.setIsRecyclable(false);
viewHolder.mAdapterItemChatsBinding.lnItemRow.removeAllViews(); viewHolder.mAdapterItemChatsBinding.lnItemRow.setPadding(0, 0, 0, 0);
} else {
viewHolder.bindUser(user, ChatsFragment.this);
}
有没有更好的方法来删除recyclerview中的一些项目。如果是,那是什么?如果不是,为什么我在使用gridrecyclerview时得到空格并且当我显示正常的recyclerview时工作正常?
答案 0 :(得分:1)
取代删除视图,而不是从列表中删除项目并设置
adapter.notifyDataSetChanged();
答案 1 :(得分:0)
我认为您可以尝试刷新gridView或适配器。
例如
adapter.notifyDataChanged();
grid.invalidateViews();
grid.setAdapter(adapter);