如何在Android中使用ArrayAdapter删除ListView中的所有项目
我正在开发一个由函数动态填充的Listview,该函数返回接收字符串参数的ArrayAdapter。此字符串参数是另一个动态填充微调器的选定项 当函数返回的ArrayAdapter中的项目数大于0时,Listview将使用新项目成功刷新,但当函数在ArrayAdapter中返回0个项目时,Listview不会清除以前的项目。以下是我正在编写的代码:如何在Android中使用ArrayAdapter删除ListView中的所有项目,android,Android,我正在开发一个由函数动态填充的Listview,该函数返回接收字符串参数的ArrayAdapter。此字符串参数是另一个动态填充微调器的选定项 当函数返回的ArrayAdapter中的项目数大于0时,Listview将使用新项目成功刷新,但当函数在ArrayAdapter中返回0个项目时,Listview不会清除以前的项目。以下是我正在编写的代码: ManifiestoSpinner = (Spinner) findViewById(R.id.spnManifiesto); FacturasLi
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);
}
ManifiestoSpinner=(Spinner)findViewById(R.id.spnManifiesto);
FacturasListview=(ListView)findViewById(R.id.lvwFacturas);
ManifiestoSpinner=(微调器)
ManifiestoSpinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
字符串EstadoID=EstadoSpinner.getSelectedItem().toString();
ArrayList ListManifiestos=(ArrayList)Factura.GetManifiestosByEstado(EstadoID);
ManifiestSpinner(manifiesto);
}
未选择公共无效(AdapterView arg0){
}
专用手动微调器(ArrayList manifiesto)
{
String[]datos=新字符串[manifiesto.size()];
ArrayAdapter AdapterManifiesto=新的ArrayAdapter(getApplicationContext(),
android.R.layout.simple_微调器_下拉列表_项,manifiesto.toArray(datos));
ManifiestoSpinner.setAdapter(AdapterManifiesto);
}
ManifiestoSpinner.setOnItemSelectedListener(新的OnItemSelectedListener(){
已选择公共视图(AdapterView arg0、视图arg1、内部arg2、长arg3){
字符串Manifiesto=ManifiestoSpinner.getSelectedItem().toString();
字符串Estado=EstadoSpinner.getSelectedItem().toString();
fillData(Estado、Manifiesto);
返回;
}
未选择公共无效(AdapterView arg0){
}
});
私有void fillData(字符串EstadoID、字符串ManifiestoID){
ArrayAdapter=(ArrayAdapter)FacturasListview.getAdapter();
if(适配器!=null)
{
适配器。清除();
FacturasListview.setAdapter(适配器);
FacturasListview.invalidateViews();
}
List from=Factura.getListClientsByStatomanifiesto(EstadoID,ManifiestoID);
适配器=新阵列适配器(此,R.layout.factura_行,R.id.text1,from);
FacturasListview.setAdapter(适配器);
}
当从调用的列表具有from.size()=0时,以前显示在Listview上的项目不会被清除。在
fillData
方法中
if(adapter!= null)
{
adapter.clear();
FacturasListview.setAdapter(adapter);// !!!!!!!
FacturasListview.invalidateViews();
}
调用adapter.clear();
后,设置列表视图的适配器不会改变任何内容
只需调用FacturasListview.notifyDatasetChanged()
像这样
if(adapter!= null)
{
adapter.clear();
FacturasListview.notifyDatasetChanged();
}
class MyAdpater {
List<String> list;
.....
.....
public void setAdpaterList(List<String>list){
this.list= list;
}
}
这将清除列表中的所有视图
如果您想更改ListView的适配器,我将使用一种方法制作一个自定义数组适配器,该方法采用List
并更改adapter
中List
的先前引用,然后调用notifyDatasetChanged();
像这样
if(adapter!= null)
{
adapter.clear();
FacturasListview.notifyDatasetChanged();
}
class MyAdpater {
List<String> list;
.....
.....
public void setAdpaterList(List<String>list){
this.list= list;
}
}
类myadpeter{
名单;
.....
.....
公共无效setAdpaterList(列表列表){
this.list=list;
}
}
然后在您的适配器上调用此方法调用notifyDatasetChange()
谢谢Nammari。我遵循了您的建议,但FacturasListview没有名为notifyDatasetChanged()的方法,适配器有,因此我得到了以下代码:
ArrayAdapter<String> adapter = (ArrayAdapter<String>) mFacturasListview.getAdapter();
if(adapter!= null)
{
adapter.clear();
adapter.notifyDataSetChanged();
}
ArrayAdapter adapter=(ArrayAdapter)mFacturasListview.getAdapter();
if(适配器!=null)
{
适配器。清除();
adapter.notifyDataSetChanged();
}
Listview仍然不会刷新项目。我正在寻找一种方法,可以清除接收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);
private void fillData(字符串EstadoID、字符串ManifiestoID){
ArrayAdapter=(ArrayAdapter)mFacturasListview.getAdapter();
if(适配器!=null)
{
适配器。清除();
adapter.notifyDataSetChanged();
}
List from=Factura.getListClientsByStatomanifiesto(EstadoID,ManifiestoID);
适配器=新阵列适配器(此,R.layout.factura_行,R.id.text1,from);
FacturasListview.setAdapter(适配器);
}
当第一个微调器有一个selecteditem().toString()=“POR ENTREGAR”时,就会出现问题。根据该参数,我们发现0个文档有(document.State=“POR ENTREGAR”)。在这里,第三个名为“fillData”的方法应该清除所有ListView项,但它没有。这是图像:
谢谢Nammari。我遵循了你的建议,但我发布了一个详细信息。