2017-12-01 8 views
0

さて、私はそれを理解していると思うが、確かめたい。私はListViewが含まれているListViewAdapterを持っている。私は何をしたいと思う検索は、データベース内の考えとListViewで表示されます。このコードは、listViewにアイテムを追加します。listViewAdapter.clear()とlist.clear()の違いは何ですか?

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"); 

     } 
    }); 

私がこれを書いている間、私はそれを理解していると思います。第3のものと第1のものはかなり同じです。

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()だけを実行すると、リストビューはクリアされませんか?

答えて

0

list.clear();に電話すると、すべての要素がリストから削除されます。この呼び出しが返った後、リストは空になります。しかし、あなたのアダプタビューはまだ変更されていません。アダプターをリフレッシュするには、adapter.notifyDataSetChanged()に電話する必要があります。

もう1つのケースでは、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(); 
} 
+0

オーケー!ありがとうございました! –

0

listViewAdapter.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に使用したのと同じ.ITました。

関連する問題