Dha*_*val 38 android firebase android-recyclerview firebase-realtime-database firebaseui
我正在使用Firebase Recycler Adapter(Firebase UI库)来填充Recycler View.我想在条件上隐藏项目(行).我有一个包含回收者视图的LinearLayout.
我在populateViewHolder()
循环器视图适配器的方法中将线性布局可见性设置为Gone .
@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());
}
Run Code Online (Sandbox Code Playgroud)
它隐藏了LinearLayout,但行仍留有空白.
是否有任何方法我应该覆盖以克服这个或有什么方法来实现结果?
inc*_*ito 74
在某些情况下,仅更改可见性属性可能仍然最终为已分配的空白区域(因为父视图的填充,边距,内部元素等).然后更改父视图的高度有助于:
holder.itemView.setVisibility(View.GONE);
holder.itemView.setLayoutParams(new RecyclerView.LayoutParams(0, 0));
Run Code Online (Sandbox Code Playgroud)
Flo*_*lin 27
您应该隐藏UsersViewholder布局xml中的所有视图或父级.
itemView.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
但是别忘了设置它们VISIBLE
,你最终会收到回收中的一些奇怪的东西
Sam*_*dal 25
view.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
给你一个空白视图
然后按照这个.
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.
}
}
Run Code Online (Sandbox Code Playgroud)
现在从适配器调用
mFirebaseAdapter = new FirebaseRecyclerAdapte......{
public void populateViewHolder.....{
if(model.getData().equals("..Something.."))
{
viewHolder.Layout_hide();
}
else
viewHolder.Person_Email(model.getEmail());
}
}
Run Code Online (Sandbox Code Playgroud)
在 RecyclerView 中没有内置的方法来隐藏子项。但您可以在适配器中实现此功能。
public class MyAdapter extends RecyclerView.Adapter<...>{
List<Object> items;
Map<Integer,Object> deletedItems;
...
public void hideItem(final int position) {
deletedItems.add(position, items.get(position));
items.remove(position);
notifyItemRemoved(position);
}
....
}
Run Code Online (Sandbox Code Playgroud)
如果您隐藏整个 itemView 并面临空格问题。
试试这个来隐藏 itemView。
holder.itemView.setVisibility(View.GONE);
ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
params.height = 0;
params.width = 0;
holder.itemView.setLayoutParams(params);
Run Code Online (Sandbox Code Playgroud)
这是为了显示它。
holder.itemView.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
这是一个 recyclerView,因此在 if else 块中同时使用两者,否则您可能会遇到一些意外的 UI 问题。
小智 5
“GONE”不会删除项目占用的空间......你可以使用
if (condition) {
item.layoutParams.height = 0
item.layoutParams.width = 0
}
Run Code Online (Sandbox Code Playgroud)
在“onBindViewHolder”里面
归档时间: |
|
查看次数: |
44337 次 |
最近记录: |