Inhoud lijstweergave wissen?

Ik heb een klein probleem met ListView. Hoe wis ik een ListView-inhoud, wetende dat deze een aangepaste adapter heeft?

edit
de aangepaste adapterklasse breidt BaseAdapteruit, het ziet er als volgt uit:

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

Antwoord 1, autoriteit 100%

Gewoon schrijven

listView.setAdapter(null);

Antwoord 2, autoriteit 28%

Ik neem aan dat je een lijst of een array hebt doorgegeven aan de adapter. Als u de instantie van deze toegevoegde verzameling behoudt, kunt u een

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

dit werkt alleen als je de adapter hebt geïnstantieerd met collectionen het is dezelfde instantie.

Ook, afhankelijk van de adapter die u hebt verlengd, kunt u dit mogelijk niet doen. SimpleAdapterwordt gebruikt voor statische gegevens en kan dus niet worden bijgewerkt nadat ze zijn gemaakt.

PS. niet alle adapters hebben een clear()methode. ArrayAdapterwel, maar ListAdapterof SimpleAdapterniet


Antwoord 3, autoriteit 4%

Het is eenvoudig. Eerst moet u uw verzameling wissen en daarna een lijst wissen zoals deze code:

yourCollection.clear();
 setListAdapter(null);

Antwoord 4, autoriteit 2%

Vanaf Android-versies M en N werkt het volgende voor mij en zou dit de juiste aanpak zijn. Het legen van de ListView of het instellen van de Adapter op null is niet de juiste aanpak en zou leiden tot een probleem met de null-aanwijzer, ongeldige ListView en/of crash van de app.

Gewoon doen:

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

d.w.z. eerst wist u de lijst helemaal en laat u de adapter weten over deze wijziging. Android zorgt voor een correcte update van de gebruikersinterface met een lege lijst. In mijn geval is mijn lijst een ArrayList.

Als u deze bewerking vanuit een andere thread uitvoert, voert u deze code uit in de UI-thread:

   runOnUiThread(mRunnable);

Waar mRunnable zou zijn:

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

Antwoord 5

Eenvoudig, het werkt voor mij 🙂

YourArrayList_Object.clear();

Antwoord 6

Verwijder uw items van uw aangepaste adapter en bel notifyDataSetChanged().


Antwoord 7

Er is een oplossing voor de dubbele invoer in de lijstweergave.
U moet de onBackPress()-methode voor uw activiteit declareren en de onderstaande markeercode opschrijven:

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    **
    attendence_webdata.clear(); list.setAdapter(null);
    --------------------------------------------------
    **
 }

Antwoord 8

Zet gewoon de code ListView.Items.Clear();op uw methode


Antwoord 9

Bel de methode clear()aan vanaf uw aangepaste adapter .


Antwoord 10

Je moet zowel clear()vanuit ArrayAdapter als notifyDataSetChanged()beide aanroepen.

Hieronder is de link
klik

Other episodes