webentwicklung-frage-antwort-db.com.de

Inhalt der Listenansicht löschen?

Ich habe ein kleines Problem mit ListView. Wie lösche ich einen ListView-Inhalt und weiß, dass er über einen benutzerdefinierten Adapter verfügt?

edit - Die benutzerdefinierte Adapterklasse erweitert BaseAdapter. Sie sieht folgendermaßen aus:

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= v.findViewById(R.id.dexter);
            v.setTag(holder);
        } else {
            holder = v.getTag();
        }

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

        return v;
    }

}
71
Mohamed Gallah

Einfach schreiben

listView.setAdapter(null);
186
mikepenz

Ich denke, Sie haben dem Adapter eine Liste oder ein Array übergeben. Wenn Sie die Instanz dieser hinzugefügten Sammlung beibehalten, können Sie eine 

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

dies funktioniert nur, wenn Sie den Adapter mit collection instanziiert haben und es sich um dieselbe Instanz handelt.

Abhängig von dem Adapter, den Sie erweitert haben, können Sie dies möglicherweise auch nicht tun. SimpleAdapter wird für statische Daten verwendet und kann daher nach der Erstellung nicht aktualisiert werden.

PS. Nicht alle Adapter verfügen über eine clear () -Methode. ArrayAdapter nicht, aber ListAdapter oder SimpleAdapter nicht

51
Maragues

Es ist ganz einfach. Zuerst sollten Sie Ihre Sammlung löschen und anschließend eine Liste mit folgendem Code erstellen:

 yourCollection.clear();
 setListAdapter(null);
7
zheek

Ab Android-Versionen M und N funktioniert das Folgende für mich und wäre der richtige Ansatz. Das Leeren der ListView oder das Setzen des Adapters auf null ist nicht der richtige Ansatz und würde zu einem Nullzeigerproblem, ungültiger ListView und/oder zum Absturz der App führen.

Einfach machen:

    mList.clear();
    mAdapter.notifyDataSetChanged();

d. h. Sie löschen zunächst die Liste insgesamt und teilen dem Adapter dann diese Änderung mit. Android sorgt für eine korrekte Aktualisierung der Benutzeroberfläche mit einer leeren Liste. In meinem Fall ist meine Liste eine ArrayList.

Wenn Sie diesen Vorgang von einem anderen Thread aus ausführen, führen Sie diesen Code im UI-Thread aus:

    runOnUiThread(mRunnable);

Wo mRunnable wäre:

    Runnable mRunnable = new Runnable() {
        public void run() {
            mList.clear();
            mAdapter.notifyDataSetChanged();
        }
    };;
3
zeeshan

Einfach funktioniert es mir :)

YourArrayList_Object.clear();
1
Agilanbu

Fügen Sie einfach den Code ListView.Items.Clear(); in Ihre Methode ein

0
Charles

Es gibt eine Lösung für den doppelten Eintrag in listview . Sie müssen die onBackPress()- -Methode für Ihre Aktivität deklarieren und den unten angegebenen Hervorhebungscode aufschreiben: 

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    **

    attendence_webdata.clear(); list.setAdapter(null);
    --------------------------------------------------

    **
 }
0
Arpit Patel

Entfernen Sie Ihre Artikel aus Ihrem benutzerdefinierten Adapter und rufen Sie notifyDataSetChanged() auf.

0
mreichelt