我使用Firebase回收适配器(Firebase UI Library)填充回收视图。我想在一个条件下隐藏一个项目(行)。我有一个LinearLayout包含一个回收者的观点。
我在回收器视图适配器的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,但是行仍然是空的。
我是否有什么方法可以克服这个问题,或者有什么方法可以达到这个目的?
发布于 2016-12-19 13:22:32
您应该将所有视图或父视图隐藏在UsersViewholder布局xml中。你应该隐藏整个越野车或每个视图
整个越野车:
itemView.setVisibility(View.GONE);或者每一个元素:
view.setVisibility(View.GONE);但是别忘了把它们设置为VISIBLE,否则,你最终会从回收中得到一些奇怪的东西。
发布于 2017-09-21 10:50:55
在某些情况下,只更改可见性属性的结果可能仍然是分配的空白(因为父视图的填充、边距、内部元素等等)。然后更改父视图的高度有助于:
holder.itemView.setVisibility(View.GONE); 
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));然后确保在它应该是可见的条件下,也设置:
holder.itemView.setVisibility(View.VISIBLE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));您需要这样做,因为viewHolder是在滚动时回收的,如果您这样更改属性,并且永远不会将它们返回到它们的自然状态,那么其他元素将在重用相同视图的情况下被隐藏。
发布于 2017-05-17 09:48:25
IF
view.setVisibility(View.GONE);给你一个空白的视图
那就跟着这个。
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.
    }
  }现在从适配器调用
mFirebaseAdapter = new FirebaseRecyclerAdapte......{
public void populateViewHolder.....{
if(model.getData().equals("..Something.."))
  {
      viewHolder.Layout_hide();
  }
else
      viewHolder.Person_Email(model.getEmail());
   }
 }https://stackoverflow.com/questions/41223413
复制相似问题