繁体   English   中英

删除Gridlayout Recyclerview中的某些项目会留下空白

[英]Removing some items in Gridlayout Recyclerview leaves Empty spaces

我试图在我的recyclerview中从Json响应中删除一些项目,但是当我这样做时,正在创建一个空的项目空间来代替已删除的项目。 仅当我将gridlayout管理器与recyclerview一起使用时,才会发生这种情况,如果我使用Linearlayout管理器,则没有空白。

下面是我的代码:

 activityRecylerviewBinding.recyclerview1.setHasFixedSize(true);
    //activityRecylerviewBinding.recyclerview1.setLayoutManager(new LinearLayoutManager(getActivity()));

    RecyclerView.LayoutManager mLayoutManager = new GridLayoutManager(getActivity(), 2);
    activityRecylerviewBinding.recyclerview1.setLayoutManager(mLayoutManager);
    activityRecylerviewBinding.recyclerview1.addItemDecoration(new GridSpacingItemDecoration(2, dpToPx(5), true));
    activityRecylerviewBinding.recyclerview1.setItemAnimator(new DefaultItemAnimator());

对于删除项目:

 if (!user.emailId.equals(clickedemail)){
                 viewHolder.setIsRecyclable(false);
                 viewHolder.mAdapterItemChatsBinding.gooot.removeAllViews();
                 viewHolder.mAdapterItemChatsBinding.gooot.setPadding(0, 0, 0, 0);
                 //viewHolder.mAdapterItemChatsBinding.gooot.getLayoutParams().height = 0;
             }else {
                 viewHolder.bindUser(user, RecycFragment.this);
             }

当我使用打击代码时,效果很好。

        activityRecylerviewBinding.recyclerview1.setLayoutManager(new LinearLayoutManager(getActivity()));

JsonParsing代码:

 private void initializeFirebase() {

    final Query refUsers = FirebaseDatabase.getInstance()
            .getReference(ConstantsFirebase.FIREBASE_LOCATION_GARMENTS);
    refUsers.keepSynced(true);

    final List<UploadImage> uploadImageList = new ArrayList<>();
    refUsers.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot messageSnapshot : dataSnapshot.getChildren()) {

                UploadImage uploadImage = messageSnapshot.getValue(UploadImage.class);

                uploadImageList.add(uploadImage);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

    mAdapter = new FirebaseRecyclerAdapter<UploadImage, ChatsItemHolder>(UploadImage.class, R.layout.recycitemfirebase,
            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, final UploadImage user, int position) {
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
            clickedemail = prefs.getString(Constants.KEY_CLICKED_EMAIL, "");

             if (!user.emailId.equals(clickedemail)){
                 viewHolder.setIsRecyclable(false);
                 viewHolder.mAdapterItemChatsBinding.gooot.removeAllViews();
                 viewHolder.mAdapterItemChatsBinding.gooot.setPadding(0, 0, 0, 0);

              //viewHolder.mAdapterItemChatsBinding.gooot.getLayoutParams().height = 0;
             }else {
                 viewHolder.bindUser(user, RecycFragment.this);
             }

          viewHolder.mAdapterItemChatsBinding.title.setText(user.getGarment_name());

            viewHolder.mAdapterItemChatsBinding.count.setText(user.getGarment_color());
            Glide.with(viewHolder.mAdapterItemChatsBinding.thumbnail.getContext())
                    .load(user.getImage())
                    .placeholder(R.drawable.ic_person)
                    .fitCenter()
                    .dontAnimate()
                    .into(viewHolder.mAdapterItemChatsBinding.thumbnail);
        }
    };

    activityRecylerviewBinding.recyclerview1.setAdapter(mAdapter);

}

有人可以告诉我我在做什么错吗?

您要在哪里从数据集中删除项目?

删除项目的操作是否应该在数据集中具有项目索引? 如果是这样,这样的事情应该起作用:

public void removeItem(final int index) {
    list.remove(index);
    adapter.notifyItemRemoved(index);
}

似乎,用于recyclerview的适配器是使用firebase查询作为项目的源构建的。

您需要将Firebase查询更改为仅获取您想要包含在列表中的项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM