2017-09-16 98 views
0

我一直在寻找在今后相当一段时间,还没找到一个合适的回答消除他们:Recyclerview:隐藏项目,而不从ArrayList中

有没有办法从RecyclerView不删除删除项目它从底层ArrayList? 我想添加一个功能,当某个条件成立时,暂时从列表中隐藏项目。我后来仍然需要这些项目,但管理2个单独的ArrayList看起来过于复杂。 如果我将适配器内部的可见性设置为gone,那么我在项目所在的位置有一个可见的间隙,所以这不是解决方案。

有什么办法可以避免管理2个独立的ArrayLists?

+0

当您将物品可见性设置为'GONE'时,您可以发布RecyclerView的外观吗? –

+0

请发布您的适配器代码。 –

回答

0

你有一个模型/ POJO类对象类型

而从JsonResponse迭代JsonData的只是通过布尔值的true/false在对象类型模型类,你有对象类型的ArrayList。您想要显示的数据使其成为true否则为false,之后您可以将'false value设置为true'给Model类。

希望这会起作用。

+0

我认为问题是关于隐藏整行,而不是单个视图。 –

+0

在从服务器加载数据之前,请在活动中进行适配器布局(row_item)映射并在recyclerview/Listview中设置适配器。获取数据后,不要做'adapter.notifyDataSetChanged',这样你的listview就会变成空白/隐藏。每当你想要显示查看只是做notifyDataSetChanged。 –

+0

为什么在获取数据后不通知适配器?此外,仍然不确定的行阻止视图被膨胀成一排 –

0

我想你将不得不从数据模型中删除。否则,如你所说,或者当你滚动时,你会最终得到空白行,“隐藏的”回收元素会混乱起来。

仅仅因为您从Arraylist中删除并不意味着您不能添加其他列表来临时存储已删除的项目。

例如,在适配器

private List<Item> removed = new ArrayList<>(); 

public void remove(int position) { 
    removed.add(items.get(position)); 
    items.remove(position); 
    notifyDataSetChanged(); 
} 

如果您需要了解您已删除的项目,一个HashMap可能会更好更好的功能进行定义。