Ich habe ein kleines Problem mit ListView
. Wie lösche ich einen ListView
Inhalt, wenn ich weiß, dass er einen benutzerdefinierten Adapter hat?
edit
- Die benutzerdefinierte Adapterklasse wird erweitert BaseAdapter
und 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;
}
}
Adapter.clear()
... nur schade, dass es das nicht gibt ! : /ListFragment
vorzugsweise von der Verwendung verlängernsetListAdapter(null);
Ich denke, Sie haben eine Liste oder ein Array an den Adapter ü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 von Ihnen erweiterten Adapter ist dies möglicherweise nicht möglich. SimpleAdapter wird für statische Daten verwendet und kann daher nach der Erstellung nicht aktualisiert werden.
PS. Nicht alle Adapter haben eine clear () -Methode. ArrayAdapter funktioniert, ListAdapter oder SimpleAdapter jedoch nicht
quelle
Es ist ganz einfach. Zuerst sollten Sie Ihre Sammlung löschen und nach dem Löschen der Liste diesen Code verwenden:
yourCollection.clear(); setListAdapter(null);
quelle
Ab den 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, einer ungültigen ListView und / oder einem Absturz der App führen.
Einfach machen:
mList.clear(); mAdapter.notifyDataSetChanged();
Das heißt, Sie löschen zuerst die Liste vollständig und informieren dann den Adapter über diese Änderung. Android sorgt dafür, dass die Benutzeroberfläche mit einer leeren Liste korrekt aktualisiert wird. 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(); } };;
quelle
Einfach funktioniert es mir :)
YourArrayList_Object.clear();
quelle
Entfernen Sie Ihre Artikel von Ihrem benutzerdefinierten Adapter und rufen Sie an
notifyDataSetChanged()
.quelle
Es gibt eine Lösung für den doppelten Eintrag in der Listenansicht. Sie müssen die
onBackPress()
Methode für Ihre Aktivität deklarieren und den unten angegebenen Markierungscode notieren:@Override public void onBackPressed() { // TODO Auto-generated method stub super.onBackPressed(); ** attendence_webdata.clear(); list.setAdapter(null); -------------------------------------------------- ** }
quelle
Geben Sie einfach den Code ein
ListView.Items.Clear();
in Ihre Methode einquelle
Rufen Sie die
clear()
Methode von Ihrem benutzerdefinierten Adapter aus auf.quelle
Sie müssen beide
clear()
von ArrayAdapter undnotifyDataSetChanged()
beide aufrufen .Unten ist Linkklick
quelle