Mehrere ImageButton Namen in einer For-Schleife benennen?

  • Antworten:12
  • OffenNicht stickyNicht beantwortet
  • 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 :-(

  • Forum-Beiträge: 2.211

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 ]

  • 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
  • Forum-Beiträge: 2.211

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 ]

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

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. :) ;)

  • 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.

Ludy
  • Mod
  • Blogger
  • Forum-Beiträge: 6.770

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.☺

Lebensmittelwarnung App-Thread

Download Samsung Firmware Tool

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

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. :) ;)

  • 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.

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

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. :) ;)

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.305

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. :) ;)

  • 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 :-(