ListView einen ArrayAdapter hinzufügen und von diesem dann wieder auf die ListView drauf zugreifen?

  • Antworten:1
Philip M.
  • Forum-Beiträge: 90

31.01.2012, 10:14:14 via Website

Guten Morgen liebe Android-Gemeinde,

eigentlich habe ich nur eine recht kurze Frage, nämlich ob ich von einem ArrayAdapter wieder auf die ListView zugreifen kann?

In meinem Adapter lade ich nämlich Bilder nach (AsyncTask), aber falls die View für die ich das Bild grade lade in der ListView durch z.B. scrollen garnicht mehr sichtbar ist, kann ich den download ja auch abbrechen. Denn so wie es jetzt ist habe ich das Problem das wenn ich eine ListView mit z.B. 100 Einträgen habe, dann direkt ganz nach unten scrolle, das trotzdem die Bilder alle von oben nach unten geladen werden und es so doch schon eine halbe Minute vergehen kann bis die Bilder unten geladen werden.

Hat einer von euch vielleicht Rat? Falls Quellcode benötigt wird dann sagt das bitte, aber ich denke zu dieser recht allgemeinen Frage ist das nicht nötig. :)

Antworten
Gelöschter Account
  • Forum-Beiträge: 24

31.01.2012, 12:45:58 via Website

Klar geht das.

Das ist das Standard getView Verhalten mit ViewHolder. hier ein zusammenkopiertes Beispiel für Dich:

1public class MyAdapter extends ArrayAdapter<MyContainer> {
2
3 private static class ViewHolder {
4 private MyImageView imageViewFolder;
5 private TextView textViewInhalt;
6 private TextView textViewInhalt2;
7 private TextView textViewName;
8 }
9
10 private ArrayList<MyContainer> containers;
11 private Context context;
12 private DrawableCache drawableCache;
13 private int layout;
14 private LayoutInflater layoutInflater;
15 private Resources resources;
16
17 public MyAdapter(final Context context, final int layout, final ArrayList<MyContainer> containers) {
18 super(context, layout, containers);
19
20 this.context = context;
21 this.layout = layout;
22 this.containers = containers;
23
24 resources = context.getResources();
25
26 drawableCache = DrawableCache.getInstance(context, resources.getString(R.string.txt_appname));
27
28 layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
29 }
30
31 public void add(final ArrayList<MyContainer> containers) {
32 if (containers != null) {
33 this.containers.addAll(containers);
34 }
35 }
36
37 public void clear() {
38 containers.clear();
39 }
40
41 public long getSize() {
42 long rc = 0;
43
44 if (containers != null) {
45 rc = containers.size();
46 }
47
48 return rc;
49 }
50
51 @Override
52 public View getView(final int position, final View contentView, final ViewGroup viewGroup) {
53
54 View view = null;
55 ViewHolder viewHolder = null;
56
57 if (contentView == null) {
58 view = layoutInflater.inflate(layout, null);
59
60 if (view != null) {
61 viewHolder = new ViewHolder();
62 viewHolder.imageViewFolder = (MyImageView) view.findViewById(R.id.dateiliste_row_folder);
63 viewHolder.textViewInhalt = (TextView) view.findViewById(R.id.dateiliste_row_inhalt);
64 viewHolder.textViewInhalt2 = (TextView) view.findViewById(R.id.dateiliste_row_inhalt2);
65 viewHolder.textViewName = (TextView) view.findViewById(R.id.dateiliste_row_name);
66 view.setTag(viewHolder);
67 }
68 } else {
69 view = contentView;
70 viewHolder = (ViewHolder) contentView.getTag();
71 }
72
73 if (viewHolder != null) {
74 // Hier steht Dir nun alles offen
75 }
76
77 return view;
78 }

Antworten