2012-02-08 12 views
2

StringViewを返す関数でListviewを動的に埋め込んで開発しています。この文字列パラメータは、動的に埋め込まれた別のSpinnerの選択項目です。AndroidでArrayAdapterを使用してListView内のすべてのアイテムを削除するには

関数は、アイテム数> 0のArrayAdapterを返すと、Listviewは新しいアイテムで正常に更新されますが、関数がArrayAdapterで0個のアイテムを返すとき、リストビューは前のアイテムをクリアしません。

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); 



} 

から呼び出されたリストは、()= 0は、アイテムが以前にリストビューに表示from.sizeを持ってクリアされていません。ここで私が働いているコードです。あなたのfillData方法

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

答えて

0

ListViewのアダプタはちょうどFacturasListview.notifyDatasetChanged()を呼び出し 何も変更されません設定adapter.clear();を呼び出した後、あなたは私がListを取る方法と、カスタム・アレイ・アダプタになるだろう、リストビューのアダプタを変更したい場合には、この

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

よう

このリスト

内のすべてのビューをクリアする必要がありますし、 adapterListの以前の参照を変更し、その後、この

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


public void setAdpaterList(List<String>list){ 
this.list= list; 
} 
} 
のような notifyDatasetChanged(); を呼び出します

このメソッドを呼び出すと、notifyDatasetChange()、アダプタで

+0

ありがとうございます。私はあなたの推薦に従ったが、私が投稿した詳細があった。 –

5

ありがとうナママリ。私はあなたの勧告に従ったがFacturasListviewはnotifyDatasetChanged(というメソッドを持っていません)、アダプタはありませんので、私はこのコードを持って:

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

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

まだリストビューにはアイテムが更新されませんが。私は、ArrayAdapterを受け取るListViewのすべての項目をクリアするメソッドを探しています。私が働いていることを示すために2枚の写真をアップロードしています。この場合

"Imagen 1"

は、最初のスピナーはのSelectedItem()のtoString()=「POR RECIBIR」、およびそのパラメータに基づいて、第二のスピナーを動的にすべての文書のコードで満たされているを有します有する(document.State = "POR RECIBIR")。 2番目のスピナーが塗りつぶされた後、 "fillData"と呼ばれる3番目のメソッドは、ドキュメントに含まれるすべての顧客の名前をListViewに入力します。これは、コードである:最初のスピナーが、のSelectedItem()のtoString()= "POR ENTREGAR" を有する場合

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); 

}

問題が発生し、そのパラメータに基づいて、我々が有する0ドキュメントを見つけます(document.State = "POR ENTREGAR")。ここでは、 "fillData"と呼ばれる3番目のメソッドはすべてのListViewアイテムをクリアするはずですが、それは行いません。これは画像です:

"Imagen 2"

関連する問題