【问题标题】:Recyclerview: Hiding Items without removing them from the ArrayListRecyclerview:隐藏项目而不从 ArrayList 中删除它们
【发布时间】:2017-09-16 14:19:43
【问题描述】:

我找了好久,没有找到合适的答案:

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

有什么方法可以避免管理 2 个单独的 ArrayList?

【问题讨论】:

  • 您能否发布一张当您将项目可见性设置为 GONE 时 RecyclerView 的截图?
  • 请发布您的适配器代码。

标签: java android arraylist android-recyclerview


【解决方案1】:

我认为您实际上必须从数据模型中删除。否则,正如您所说,您最终会得到空白行,或者当您滚动时,“隐藏”的回收元素会变得混乱。

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

比如在适配器中定义这个

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

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

如果您需要更好的功能来了解已删除的项目,Hashmap 可能会更好。

【讨论】:

  • removed.add(items.remove(position));
【解决方案2】:

你有一个对象类型的 ArrayList 你有一个 Object 类型的模型/pojo 类

从 JsonResponse 迭代 JsonData 时,只需在对象类型 Model 类中传递布尔值 true/false。您要显示的数据使其为真,否则为假,稍后您可以将“假值设置为真”到您的模型类。

希望这会奏效。

【讨论】:

  • 我认为问题在于隐藏整行,而不是单个视图。
  • 在从服务器加载数据之前,在活动中进行适配器布局(row_item)映射并在recyclerview/Listview中设置适配器。获取数据后不要执行“adapter.notifyDataSetChanged”,这样您的列表视图将为空白/隐藏。每当您想要显示视图时,只需执行 notifyDataSetChanged。
  • 获取数据后为什么不通知适配器?此外,仍然不确定阻止视图膨胀成一行的行
【解决方案3】:

就我而言,我使用的是getApplicationContext() 而不是getContextthis

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    相关资源
    最近更新 更多