gpt4 book ai didi

android - 如何在 Android 中使用 ArrayAdapter 删除 ListView 中的所有项目

转载 作者:太空狗 更新时间:2023-10-29 16:23:16 24 4
gpt4 key购买 nike

我正在开发一个由函数动态填充的 ListView ,该函数返回一个接收字符串参数的 ArrayAdapter。此字符串参数是另一个动态填充的 Spinner 的选定项。

当函数返回一个项目数大于 0 的 ArrayAdapter 时,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);



}

当调用的 List 的 from.size() = 0 时,之前显示在 Listview 上的项目不会被清除。

最佳答案

谢谢南马里。我听从了你的建议,但 FacturasListview 没有名为 notifyDatasetChanged() 的方法,适配器有,所以我得到了这段代码:

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

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

Listview 仍然不会刷新项目。我正在寻找一种方法来清除接收 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"

关于android - 如何在 Android 中使用 ArrayAdapter 删除 ListView 中的所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9203429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com