2012-02-08 32 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"

相关问题