私は、特定の項目をArrayList "mTaskList"から隠すオプションを実装しようとしています。アダプタをリセットしても新しいArrayListを取得できないのはなぜですか?
そのために、私は、アダプタのコンストラクタに "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;
}
それは動作しますが、私は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);
私はブール値を変更し、アダプタをリセットします。 mTaskListは何も変更すべきではありません。では、なぜ新しいArrayListを使用しないのですか?
は、あなたがそれをデバッグしていますか? –
既にアイテムを削除したのと同じリストを再利用していますか?アダプターを再作成しても、それらのアイテムは戻されません。 – FWeigl
デバッガでブール値をチェックし、その値を正しくfalseに設定しました。アクティビティが提供するArrayListは変更されません。なぜなら、それらの項目をアダプタ内にフィルタリングするからです。または私はここで間違っていますか? –