2012-02-08 77 views
2

我正在開發一個Listview動態填充的函數,該函數返回接收String參數的ArrayAdapter。該字符串參數是另一個動態填充的微調器的選定項目。如何在ListView中使用ArrayAdapter刪除ListView中的所有項目

當函數返回一個ArrayAdapter且項數大於0時,Listview會成功刷新新項目,但是當函數在ArrayAdapter上返回0項時,listview不會清除以前的項目。這裏是我工作的代碼:

ManifiestoSpinner = (Spinner) findViewById(R.id.spnManifiesto); 
FacturasListview = (ListView) findViewById(R.id.lvwFacturas); 

ManifiestoSpinner = (Spinner) 
    ManifiestoSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

      String EstadoID = EstadoSpinner.getSelectedItem().toString(); 
      ArrayList<String> ListManifiestos = (ArrayList<String>)Factura.GetManifiestosByEstado(EstadoID); 

      ActualizarManifiestSpinner(manifiesto); 

     } 

     public void onNothingSelected(AdapterView<?> arg0) { 

     } 

private void ActualizarManifiestSpinner (ArrayList<String> manifiesto) 
    { 

    String[] datos = new String[manifiesto.size()]; 
    ArrayAdapter<String> AdapterManifiesto = new ArrayAdapter<String>(getApplicationContext(), 
      android.R.layout.simple_spinner_dropdown_item, manifiesto.toArray(datos)); 

    ManifiestoSpinner.setAdapter(AdapterManifiesto); 

} 

ManifiestoSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

      String Manifiesto = ManifiestoSpinner.getSelectedItem().toString(); 
      String Estado = EstadoSpinner.getSelectedItem().toString(); 
      fillData(Estado, Manifiesto); 

      return; 
     } 

     public void onNothingSelected(AdapterView<?> arg0) { 

     } 

    }); 

private void fillData(String EstadoID, String ManifiestoID) { 


    ArrayAdapter<String> adapter = (ArrayAdapter<String>) FacturasListview.getAdapter(); 

    if(adapter!= null) 
    { 
     adapter.clear(); 
     FacturasListview.setAdapter(adapter); 
     FacturasListview.invalidateViews(); 
    } 

    List<String> from = Factura.GetListClientesByEstadoManifiesto(EstadoID, ManifiestoID); 

    adapter = new ArrayAdapter<String>(this,R.layout.factura_row, R.id.text1 ,from); 
    FacturasListview.setAdapter(adapter); 



} 

當從被稱爲列表具有from.size()= 0,則項目之前顯示在列表視圖不會被清零。

回答

0

在你fillData方法

if(adapter!= null) 
    { 
     adapter.clear(); 
     FacturasListview.setAdapter(adapter);// !!!!!!! 
     FacturasListview.invalidateViews(); 
    } 

調用adapter.clear();設置ListView的適配器將不會改變任何東西 後只需調用FacturasListview.notifyDatasetChanged();

這樣

if(adapter!= null) 
     { 
      adapter.clear(); 
      FacturasListview.notifyDatasetChanged(); 
     } 

這應該清除所有視圖列表中的

的情況下,你想改變的ListView的適配器我會做一個自定義的數組適配器,需要一個方法List和改變List的前一個參考的adapter,並呼籲notifyDatasetChanged(); 這樣

class MyAdpater { 
List<String> list; 
..... 
..... 


public void setAdpaterList(List<String>list){ 
this.list= list; 
} 
} 

那麼你的適配器

+0

謝謝Nammari。我遵循你的建議,但是我發佈了一個細節。 – 2012-02-09 20:23:42

5

感謝Nammari上調用此方法調用notifyDatasetChange()後。我跟着你的建議,但FacturasListview沒有一個叫notifyDatasetChanged()方法,該適配器沒有,所以我得到這個代碼:

ArrayAdapter<String> adapter = (ArrayAdapter<String>) mFacturasListview.getAdapter(); 

if(adapter!= null) 
{ 
    adapter.clear(); 
    adapter.notifyDataSetChanged(); 
} 

依然列表視圖不會刷新的項目。我正在尋找一種方法,將清除接收ArrayAdapter的ListView的所有項目。我正在上傳兩張照片以顯示我正在處理的內容。

"Imagen 1"

在這種情況下,第一旋轉器具有將selectedItem()。的toString()=「POR RECIBIR」,並基於該參數,第二旋轉器被動態地填充所有的文件的碼有(document.State =「POR RECIBIR」)。第二個微調框填充後,名爲「fillData」的第三個方法將填充ListView,其中包含文檔中包含的所有客戶名稱。這是代碼:

private void fillData(String EstadoID, String ManifiestoID) { 


ArrayAdapter<String> adapter = (ArrayAdapter<String>) mFacturasListview.getAdapter(); 

if(adapter!= null) 
{ 
    adapter.clear(); 
    adapter.notifyDataSetChanged(); 
} 

List<String> from = Factura.GetListClientesByEstadoManifiesto(EstadoID, ManifiestoID); 

adapter = new ArrayAdapter<String>(this,R.layout.factura_row, R.id.text1 ,from); 
FacturasListview.setAdapter(adapter); 

}

當所述第一旋轉器具有將selectedItem,會出現問題()的toString()= 「POR ENTREGAR」,並基於該參數,我們發現0個文檔具有(document.State =「POR ENTREGAR」)。這裏,稱爲「fillData」的第三個方法應該清除所有ListView項目,但它不會。這是圖像:

"Imagen 2"