首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在特定情况下从回收器视图中隐藏项目?

如何在特定情况下从回收器视图中隐藏项目?
EN

Stack Overflow用户
提问于 2016-12-19 13:14:26
回答 10查看 93.2K关注 0票数 79

我使用Firebase回收适配器(Firebase UI Library)填充回收视图。我想在一个条件下隐藏一个项目(行)。我有一个LinearLayout包含一个回收者的观点。

我在回收器视图适配器的populateViewHolder()方法中设置了线性布局可见性。

代码语言:javascript
运行
复制
@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,但是行仍然是空的。

我是否有什么方法可以克服这个问题,或者有什么方法可以达到这个目的?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2016-12-19 13:22:32

您应该将所有视图或父视图隐藏在UsersViewholder布局xml中。你应该隐藏整个越野车或每个视图

整个越野车:

代码语言:javascript
运行
复制
itemView.setVisibility(View.GONE);

或者每一个元素:

代码语言:javascript
运行
复制
view.setVisibility(View.GONE);

但是别忘了把它们设置为VISIBLE,否则,你最终会从回收中得到一些奇怪的东西。

票数 39
EN

Stack Overflow用户

发布于 2017-09-21 10:50:55

在某些情况下,只更改可见性属性的结果可能仍然是分配的空白(因为父视图的填充、边距、内部元素等等)。然后更改父视图的高度有助于:

代码语言:javascript
运行
复制
holder.itemView.setVisibility(View.GONE); 
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));

然后确保在它应该是可见的条件下,也设置:

代码语言:javascript
运行
复制
holder.itemView.setVisibility(View.VISIBLE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));

您需要这样做,因为viewHolder是在滚动时回收的,如果您这样更改属性,并且永远不会将它们返回到它们的自然状态,那么其他元素将在重用相同视图的情况下被隐藏。

票数 184
EN

Stack Overflow用户

发布于 2017-05-17 09:48:25

IF

代码语言:javascript
运行
复制
view.setVisibility(View.GONE);

给你一个空白的视图

那就跟着这个。

代码语言:javascript
运行
复制
public static class Data_ViewHolder extends RecyclerView.ViewHolder {
    private final LinearLayout layout;
    final LinearLayout.LayoutParams params;

    public Show_Chat_ViewHolder(final View itemView) {
        super(itemView);
        .
        .
        .
        layout =(LinearLayout)itemView.findViewById(R.id.show_item_layout);
        params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.WRAP_CONTENT);
        .
        .
        .
    }

    private void Layout_hide() {
        params.height = 0;
        //itemView.setLayoutParams(params); //This One.
        layout.setLayoutParams(params);   //Or This one.

    }
  }

现在从适配器调用

代码语言:javascript
运行
复制
mFirebaseAdapter = new FirebaseRecyclerAdapte......{
public void populateViewHolder.....{

if(model.getData().equals("..Something.."))
  {
      viewHolder.Layout_hide();
  }
else
      viewHolder.Person_Email(model.getEmail());
   }
 }
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41223413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档