Wie ale res/drawable-Resourcen einlesen?

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

29.01.2011, 18:15:59 via Website

Unter res/drawable habe ich die Resourcen a1.jpg,a2,jpg,a3.jpg,...,a50.jpg liegen.
Die Anzahl der jpg's soll flexibel sein können. D.h. die Einleseroutine soll erkennen,
wann es alle Resourcen eingelesen hat.

Die jpgs sollen jeweils einem Imagebutton zugewiesen werden können.
Für einen Button:

1ib = new ImageButton(this);
2Resources res = getResources();
3Drawable drawable = res.getDrawable(R.drawable.a1);
4ib.setImageDrawable(drawable);

Wenn ich die jpgs a[0].jpg,a[1].jpg nennen könnte, könnte ich

[code]
for (...i...) {Drawable drawable = res.getDrawable(R.drawable.a[i];}
[/code]

schreiben. Aber das geht ja nicht.
Und ich will möglichst auch ohne try...catch...auskommen.

Wie kann ich das bewerkstelligen?

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

29.01.2011, 19:44:09 via App

Hi,
so eine ähnliche Frage hatte ich hier auch schonmal gestellt, finde nur grad den Thread schlecht (vom Handy). Hab es letztendlich anders gemacht, deswegen weiß ich's nicht mehr. War etwas mit getclass oder so.
Lg Ansgar

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

29.01.2011, 20:28:37 via Website

Man könnte das evtl mittels reflection machen indem man die R.drawable Klasse ausliest:

ungetestet:

Class<?> clazz = Class.forName(R.drawable.class.getName());
Field [] fields = clazz.getDeclaredFields();
for(Field field:fields)
{
System.out.println("Field "+field.getName());
}



hth,
mac

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

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

31.01.2011, 19:13:43 via Website

Vielen Dank für die Tipps. Ich habe auch noch das hier gefunden:

https://www.nextpit.de/de/android/forum/thread/403948/String-in-ResourceID-umwandeln

Und werde es wohl so machen: Den Bildnamen erst als String speichern und dann in die Resource-ID umwandeln.

Einen String kann ich gut für eine Schleife verwenden, indem ich einfach
"1","2","3" etc. konkatiniere: a1.jpg,a2.jpg,a3.jpg,...

Wenn es eine NoSuchFieldException gibt, weiß ich, dass ich alle Felder eingelesen habe.

— geändert am 31.01.2011, 19:18:24

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

31.01.2011, 20:06:35 via Website

Mac Systems
Man könnte das evtl mittels reflection machen indem man die R.drawable Klasse ausliest:

ungetestet:

Class<?> clazz = Class.forName(R.drawable.class.getName());
Field [] fields = clazz.getDeclaredFields();
for(Field field:fields)
{
System.out.println("Field "+field.getName());
}



hth,
mac

Werde wohl doch deine Methode verwenden, da sie am flexibelsten ist,
auch wenn ich sie noch nicht 100%ig verstanden habe.

Antworten