android - 使用数据绑定(bind)删除 Recyclerview 中的某些项目显示空白

标签 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 时却能正常工作?

最佳答案

不是删除 View ,而是从列表中删除项目并设置

adapter.notifyDataSetChanged();

关于android - 使用数据绑定(bind)删除 Recyclerview 中的某些项目显示空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47807510/

相关文章:

javascript - $.getJSON() 在 IE9 中有效,但在 Chrome 和 FireFox 中无效,我的代码有什么问题?

javascript - Firebase电子邮件/密码身份验证未注册用户

javascript - Firebase Web 从 autoChildID 获取第一个子数据

java - 在 AsyncTask 中向 onPostExecute 发送参数

android - Microblink 识别器设置 RegexParserSettings

java - 如何配置 Spring 使用 @RequestBody 注释将 JSON 反序列化为 BigDecimal

swift - 使用多个查询过滤 firebase

javascript - 响应式菜单 : undesirable link click on touch devices

android - 三个不同设计的CardView只能用一个RecyclerView吗?

php - 如何在php中正确加载json?