76 votes

Effacer le contenu de la listview?

J'ai un petit problème avec listview. Comment puis-je effacer un contenu listview, sachant qu'il a un adaptateur personnalisé?

edit: la classe d'adaptateur personnalisé étend BaseAdapter, cela ressemble à ceci:

 import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private String[] data;
    private static LayoutInflater inflater=null;

    public MyAdapter(Activity _a, String[] _str)
    {
        activity = _a;
        data = _str;
        inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public static class ViewHolder{
        public TextView text;
    }

    @Override
    public int getCount() {
        return data.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        View v = view;
        ViewHolder holder;
        if(v == null)
        {
            v = inflater.inflate(R.layout.rowa, null);
            holder=new ViewHolder();
            holder.text=(TextView)v.findViewById(R.id.dexter);
            v.setTag(holder);
        }else{
            holder=(ViewHolder)v.getTag();
        }

        holder.text.setText(data[position]);


        return v;
    }

}
 

198voto

mikepenz Points 1258

Il suffit d'écrire listView.setAdapter (null)

55voto

Maragues Points 9461

Je suppose que vous avez passé d'une Liste ou d'un Tableau à l'Adaptateur. Si vous gardez l'instance de cette collection, vous pouvez faire une

collection.clear();
listview.getAdapter().notifyDataSetChanged();

cela fonctionne uniquement si vous instancié de l'adaptateur avec la collection et c'est la même instance.

Aussi, selon la Carte que vous avez prolongé, vous ne pouvez pas être en mesure de le faire. SimpleAdapter est utilisé pour les données statiques, donc il ne peut pas être mis à jour après la création.

PS. pas toutes les Cartes ont un clear() méthode. ArrayAdapter n', mais ListAdapter ou SimpleAdapter ne pas

0voto

mreichelt Points 6217

Supprimez vos éléments de votre adaptateur personnalisé et appelez notifyDataSetChanged() .

-3voto

carlovv Points 154

Appelez la méthode clear () depuis votre adaptateur personnalisé

-4voto

RockOn Points 424

Vous devez appeler clear () depuis ArrayAdapter et notifyDataSetChanged () les deux.

Ci-dessous, cliquez sur le lien

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X