java - 为什么重置我的适配器不使用新的 ArrayList?

标签 java android arraylist adapter

我正在尝试实现一个选项来隐藏 ArrayList“mTaskList”中的某些项目。

为此,我在适配器的构造函数中提供了一个 boolean 值“hideDues”。如果属实,我会将这些项目从列表中过滤掉。

public DeadlinesAdapter(Context context, ArrayList<TaskItem> taskList, DeadlinesAdapterListener listener, boolean hideDues) {
    if (hideDues) {
        for (int i = 0; i < taskList.size(); i++) {
            if (taskList.get(i).getTimeLeftInMinutes() < 1) taskList.remove(i);
        }
    }
    mTaskList = taskList;
    mContext = context;
    mListener = listener;
}

它可以工作,但是当我将该 boolean 值设置为 false 并重置适配器时,它仍然使用过滤后的列表,即使我在构造函数中提供的原始 ArrayList 没有更改。

if (mHideDues) {
                mHideDues = false;
                item.setIcon(R.drawable.ic_invisible_white);
            } else {
                mHideDues = true;
                item.setIcon(R.drawable.ic_visible_white);
            }

            mDeadlinesAdapter = new DeadlinesAdapter(this, mTaskList, this, mHideDues);
            mDeadlinesRecyclerView.setAdapter(mDeadlinesAdapter);

我更改了 boolean 值并重置了适配器。 mTaskList 不应有任何更改。那么为什么不使用一个新的 ArrayList 呢?

最佳答案

您必须像这样复制您的ArrayList:

ArrayList newList = new ArrayList(oldList);

然后才将其传递给DeadlinesAdapter。它应该可以解决您的问题。

关于java - 为什么重置我的适配器不使用新的 ArrayList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46226930/

相关文章:

java - Spring - 匿名身份验证访问被拒绝

java - GAE : Exception while allocating 16 digit ids

java - JFrame 在多个屏幕上的位置

android - 如何限制谷歌云消息服务中的特定设备?

java - 从另一个类访问数组列表

javascript - 如何在 AngularJS 中保存对象的 JSON 索引位置,而不是对象本身?

JAVA:无法在数组列表中添加多个对象。对象信息被覆盖

java - RestController 的 Junit - 断言错误

c# - 是否有必要在 Unity 中开发多种屏幕分辨率?

android - Smack 4.1 所需的最低 Android API 级别是多少?