如何在ListView中使用ArrayAdapter删除ListView中的所有项目
我正在开发一个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,则项目之前显示在列表视图不会被清零。
在你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;
}
}
后
那么你的适配器
感谢Nammari上调用此方法调用notifyDatasetChange()
后。我跟着你的建议,但FacturasListview没有一个叫notifyDatasetChanged()方法,该适配器没有,所以我得到这个代码:
ArrayAdapter<String> adapter = (ArrayAdapter<String>) mFacturasListview.getAdapter();
if(adapter!= null)
{
adapter.clear();
adapter.notifyDataSetChanged();
}
依然列表视图不会刷新的项目。我正在寻找一种方法,将清除接收ArrayAdapter的ListView的所有项目。我正在上传两张照片以显示我正在处理的内容。
在这种情况下,第一旋转器具有将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项目,但它不会。这是图像:
谢谢Nammari。我遵循你的建议,但是我发布了一个细节。 – 2012-02-09 20:23:42