簡體   English   中英

為什么重置我的適配器不使用新的ArrayList?

[英]Why does resetting my Adapter not take a new ArrayList?

我試圖實現一個選項,以從ArrayList“ mTaskList”隱藏某些項目。

為此,我在適配器的構造函數中提供了一個布爾值“ 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?

例如,您必須像這樣復制ArrayList

ArrayList newList = new ArrayList(oldList);

然后將其傳遞給DeadlinesAdapter 它應該可以解決您的問題。

Sergei指出了問題:您正在將任務列表傳遞給適配器,在此您可以對列表進行過濾。 現在,您可能想要做的是過濾列表的副本。 您實際要做的是從原始列表中刪除項目。 這就是為什么將mHideDues設置為false時,什么都不會發生的原因。

您可以做的只是:

ArrayList<TaskItem> mTaskList = new ArrayList<TaskItem>();

public DeadlinesAdapter(Context context, ArrayList<TaskItem> taskList, DeadlinesAdapterListener listener, boolean hideDues) {

    mTaskList.addAll(taskList);

    if (hideDues) {
        for (int i = 0; i < this.list.size(); i++) {
            if (mTaskList.get(i).getTimeLeftInMinutes() < 1) mTaskList.remove(i);
        }
    }

    mContext = context;
    mListener = listener;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM