如何在特定条件下从 Recycler View 隐藏项目?

新手上路,请多包涵

我正在使用 Firebase Recycler Adapter(Firebase UI 库)来填充 Recycler 视图。我想在某个条件下隐藏一个项目(行)。我有一个包含回收站视图的 LinearLayout。

我将线性布局可见性设置为 Gone in populateViewHolder() 回收器视图适配器的方法。

 @Override
protected void populateViewHolder(UsersViewHolder viewHolder, User user, int position) {

    if (user.getUserEmail().equals(Utils.decodeEmail(userEmail))) {
        viewHolder.llMain.setVisibility(View.GONE);
        return;
    }

    viewHolder.tvUserEmail.setText(user.getUserEmail());
}

它隐藏了LinearLayout,但该行仍然留有空白空间。

有没有我应该重写的方法来克服这个问题,或者有什么方法可以达到这个结果?

原文由 Dhaval 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 947
2 个回答

您应该从 UsersViewholder 布局 xml 中隐藏所有视图或父视图。您应该隐藏整个视图或每个视图

整个视图:

 itemView.setVisibility(View.GONE);

或每个元素:

 view.setVisibility(View.GONE);

但是不要忘记设置它们 VISIBLE 否则,你最终会从回收中得到一些奇怪的东西

原文由 Cătălin Florescu 发布,翻译遵循 CC BY-SA 4.0 许可协议

private fun hideShowItemView(itemView: View, toShow: Boolean) {
        itemView.isVisible = toShow
        itemView.layoutParams.height = if (toShow) ViewGroup.LayoutParams.WRAP_CONTENT else 0
 }

  1. itemView 是 ViewHolder 的一个 ItemView
  2. toShow 是一个布尔值,用于隐藏或显示 recyclerview 的项目

根据要求在 onBindViewHolder 块中使用以下代码行,

 To hide Item : hideShowItemView(holder.itemView, false)

To show Item : hideShowItemView(holder.itemView, true)

原文由 Jinal Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题