Mehrere ImageButton Namen in einer For-Schleife benennen?

  • Antworten:12
SilverBlue
  • Forum-Beiträge: 45

09.09.2016, 16:07:48 via Website

Hallo ;-)

Ich habe eine ganz einfache For-Schleife:

int i;
for (i=1; i<10; i++){
}

Nun wollte ich innerhalb der Vorschleife alle ImageButtons deklarieren:

ImageButton imgBtnItemX = (ImageButton) findViewById(R.id.imgBtnItem1);

Dabei soll die For-Schleife 10x durchlaufen werden und jeweils einen ImageButton durchnummerieren (Name des Buttons imgBtnItem1, imgBtnItem2, imgBtnItem3, etc.)

Versuche habe ich es mit

ImageButton imgBtnItemX = (ImageButton) findViewById(R.id.imgBtnItem + i);

Was nicht funktionier hat :-(

Antworten
swa00
  • Forum-Beiträge: 3.704

09.09.2016, 16:21:29 via Website

Hallo Silver,

du kannst hier sowas machen

//////////////////////////////////////////////////////////////////////////////////////
public void AddButton (String text,int ID)
{
    Button button = new Button(this);
    button.setPadding(100, 20, 20, 20);
    button.setTag (new Integer(ID));
    button.setText (text);
    button.setTextColor(0xAAFFFFFF);
    button.setGravity(Gravity.LEFT|Gravity.CENTER_VERTICAL);
    button.setOnClickListener(onButtonPressed);
    m_Holder.addView(button);
}

Der ClickListener

////////////////////////////////////////////////////////////////////////////////////////
private View.OnClickListener onButtonPressed = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Button imgBtn = (Button) v;
Integer val = (Integer) imgBtn.getTag();
if (val == 1000)
{
// Bla bla
}
}
};

Aufruf :

AddButton ("HomeScreen - Layout",1000);

P.S. Umbauen musst du es dir selbst

lg
Stefan

— geändert am 09.09.2016, 16:28:16

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
SilverBlue
  • Forum-Beiträge: 45

09.09.2016, 16:26:30 via Website

hm.. Die ImageButtons sind schon alle da. Ich glaube, das ist nicht die richtige Antwort auf meine Frage ;-)

Zum Verständnis:
Ich habe 10 ImageButtons, imgBtnItem1, imgBtnItem2, imgBtnItem3, ...

Diese müssen später alle eine For-Schleife durchlaufen und ich möchte die Buttons nicht einzeln ansprechen, sondern mit der For-Schleife. i ist die Nummer

imgBtnItem i

Antworten
swa00
  • Forum-Beiträge: 3.704

09.09.2016, 16:29:40 via Website

Lt deinem Beitrag hattest du die aber noch nicht

Nun wollte ich innerhalb der Vorschleife alle ImageButtons deklarieren:

Schau dir mal meinen Source genau an , da steht die Lösung drin :-)
Du musst ein wenig mehr mit setTag / setID arbeiten

— geändert am 09.09.2016, 16:47:27

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2016, 16:47:06 via App

Dann brauchst du ein ButtonArray wo alle drin sind.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Martin Fink
  • Forum-Beiträge: 58

09.09.2016, 17:00:24 via App

R.id.imgButtonXYZ ist kein String, es ist eine öffentliche Variable in der Klasse R.id. Deshalb kannst du den Index nicht wie bei einem String mit einem Integer setzen, das musst du manuell machen.

Pascal P.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.959

09.09.2016, 17:51:39 via App

Hallo zusammen,

man kann es mit identfier versuchen. Das Ganze in einer for abhandeln.

getResources().getIdentifier("imageButton" + i,"id",getActivity().getPackageName());

Achtung: aus dem Kopf geschrieben (!)

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2016, 18:01:59 via Website

Ich würde das nciht so machen, sobald du mehr Buttons hast, als Reservierte IDs hast du ein Problem.
Warum überhaupt eine ID und nicht gleich komplett dynamisch?
Dann hast du kein Problem, selbst wenn das später 100 Buttons werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
SilverBlue
  • Forum-Beiträge: 45

09.09.2016, 19:36:13 via Website

Das mit den Buttons konnte ich nun mit einem Array lösen und mit getIdentifier.

Allerdings stehe ich nun vor einem ähnlichen Problem, LinearLayout (also Container) :-D

Zur Laufzeit ist bereits fest, dass Box1, Box2, Box3, Box4 und Box5 sichtbar sind. Diese müssen im Code eine einfache For-Schleife durchlaufen:

int i;
for (i=1; i<10; i++){
}

Dort soll rein:

final LinearLayout box1 = (LinearLayout) findViewById((R.id.box1));
box1.addView(imgBtnItem);

Gleiches Problem wie eingangs, ich möchte die BoxNummer mit der Variable i aus der For-Schleife besetzen.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2016, 19:44:07 via Website

Hierbei auch wieder mit Arrays arbeiten. Da bist du am flexibelsten
Da geht getIdentifier auch.
Aber wie gesagt, sobald du nur eine ID hast die du vorher nicht angelegt hast --> Pech

LG Pascal //It's not a bug, it's a feature. :) ;)

SilverBlue

Antworten
SilverBlue
  • Forum-Beiträge: 45

09.09.2016, 19:54:29 via Website

hm... irgendwie muss man das doch so hinbekommen...

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2016, 19:58:26 via Website

Was meinst du mit "so hinbekommen".
Du willst was ( per schleife die GUI erzeugen), willst aber dein Code nicht anpassen??
Beides geht nicht.
Löse es doch so wie du es mit den Buttons gemacht hast, dann ist es wenigstens einheitlich

LG Pascal //It's not a bug, it's a feature. :) ;)

SilverBlue

Antworten
SilverBlue
  • Forum-Beiträge: 45

09.09.2016, 20:41:32 via Website

Okay, ich habe es so versucht, so wie ich auch die Buttons erstellt habe:

LinearLayout rb = new LinearLayout(this);
int idy = getResources().getIdentifier("rb"+i, "Ressourcen_Reihe1", getPackageName());
rb.setBackground(normalBox);
rb.setVisibility(View.VISIBLE);
rb.addView(imgBtnItem);

Allerdings sehe ich nun den Container, also das LinearLayout überhaupt nicht :-(

Antworten