使用数据绑定删除Recyclerview中的某些项目会显示空白

时间:2017-12-14 06:54:33

标签: android json firebase firebase-realtime-database android-recyclerview

我正在使用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时工作正常?

2 个答案:

答案 0 :(得分:1)

取代删除视图,而不是从列表中删除项目并设置

  

adapter.notifyDataSetChanged();

答案 1 :(得分:0)

我认为您可以尝试刷新gridView或适配器。

例如

adapter.notifyDataChanged();
 grid.invalidateViews();
 grid.setAdapter(adapter);