listViewAdapter.clear()和list.clear()有什么区别?

时间:2017-12-01 00:48:24

标签: android listview

好吧,我想我已经明白了,但我只是想确定一下。我有一个包含List的ListViewAdapter。我想做的是搜索在数据库中思考并在ListView中显示。这段代码将一个项添加到我的listView。

list.addAll(sqh.DisplayRecords(sqdb));
    listViewAdapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,list);
    listview.setAdapter(listViewAdapter);
    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           listViewAdapter.clear();

           list.clear();
           list.addAll(sqh.DisplayRecords(sqdb));
           list.add("another one");

        }
    });

使用另一段代码,只清除listviewAdapter并将另一项添加到列表中,只添加最后一项,而不是列表中的所有项目,应该在那里。

        list.addAll(sqh.DisplayRecords(sqdb));
    listViewAdapter = new ArrayAdapter( this,android.R.layout.simple_list_item_1,list);
    listview.setAdapter(listViewAdapter);
    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listViewAdapter.clear();

            list.add("another one");

        }
    });

嗯,我想我在写这篇文章时理解它。第三个和第一个是完全相同的。

list.addAll(sqh.DisplayRecords(sqdb));
    listViewAdapter = new ArrayAdapter( this,android.R.layout.simple_list_item_1,list);
    listview.setAdapter(listViewAdapter);
    search.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            listViewAdapter.clear();

            list.addAll(sqh.DisplayRecords(sqdb));
            list.add("another one");

        }
    });

listViewAdapter.clear();将清除适配器列表,对吧?为什么,当我执行list.clear()时,列表视图不会被清除?

2 个答案:

答案 0 :(得分:0)

<强> listViewAdapter.clear()

  

void clear()

     

从列表中删除所有元素。

list.clear();

/**
 * Removes all of the elements from this list.  The list will
 * be empty after this call returns.
 */
public void clear() {
    modCount++;

    // clear to let GC do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;

    size = 0;
}

如果您在此使用,则它是相同的。它曾用于Removes all of the elements from this list

答案 1 :(得分:0)

当您致电list.clear();时,您将从列表中删除所有元素。此调用返回后,列表将为空。但您的适配器视图尚未更改。您需要调用adapter.notifyDataSetChanged()来刷新适配器。

在另一种情况下,当您调用listViewAdapter.clear();时,列表将先被清除,然后notifyDataSetChanged()被调用。

您可以在ArrayAdapter.clear() source code中找到详细信息:

/**
 * Remove all elements from the list.
 */
public void clear() {
    synchronized (mLock) {
        if (mOriginalValues != null) {
            mOriginalValues.clear();
        } else {
            mObjects.clear();
        }
        mObjectsFromResources = false;
    }
    if (mNotifyOnChange) notifyDataSetChanged();
}