在recyclerview中可见性仍然占据空间吗?

时间:2019-03-12 07:21:29

标签: android android-recyclerview

这是我当前的代码。我想在recyclerview上隐藏一个特定的项目,但是当我使用visibility.gone时,仍然在recyclerview上占用空间。我还尝试了所有可能的解决方案How to hide an item from Recycler View on a particular condition?任何帮助

  for(int j =0; j < minusList.size(); j++){
      int availableRooms =  minusList.get(j);

      if(norooms > availableRooms){ //norooms is the number of rooms wanted
      holder.itemView.setVisibility(View.GONE);
      mAdapter.notifyItemRemoved(position);
     }else{
      holder.rRoomsLeft.setText("Room available");
     }

}

这是我的XML

<android.support.v7.widget.RecyclerView
                android:id="@+id/listView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusable="false"
                android:focusableInTouchMode="false" />

4 个答案:

答案 0 :(得分:0)

请尝试这个

    for(int j =0; j < minusList.size(); j++){

      int availableRooms =  minusList.get(j);

      if(norooms > availableRooms){        //norooms is the number of rooms wanted
        holder.itemView.setVisibility(View.GONE);
        mAdapter.notifyItemRemoved(position); 
     }else{
         holder.itemView.setVisibility(View.VISIBLE);
         holder.rRoomsLeft.setText("Room available");
     }
}

答案 1 :(得分:0)

我猜您说“占用空间”是因为有行但没有显示“可用房间”。

要从RecyclerView中删除一行,首先要从下划线列表中删除该行,然后调用notifyItemRemoved或notifyDatasetChanged,而不是隐藏行的视图。

在这种情况下,您需要先从minusList中删除项目,然后调用notifyItemRemoved,否则,如果getItemCount()仍返回minusList.size,RecyclerView仍认为该行在那里,即使它不可见。

答案 2 :(得分:0)

使用以下方法代替使用__dir__

holder.itemView.setVisibility(View.GONE);

答案 3 :(得分:0)

ViewGroup.LayoutParams params = chatsViewHolder.itemView.getLayoutParams();
params.height = 0;
chatsViewHolder.itemView.setLayoutParams(params);