我正在尝试实现一个选项来隐藏 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/