Code erstellte ImageButtons über eine Schleife eine ImageResource zuweisen.

C

coreytaylor211

Fortgeschrittenes Mitglied
5
Guten Abend zusammen,

Kann mir einer bei meinem Problem bitte helfen, ich habe ein eine Methode geschrieben die ein TableLayout, TableRow und ein ImageButton erzeugt.

Nehmen wir als beispiel 3 ImageButtons diese sollen per
Code:
                for (int i =0;i<array_image.size();i++){
                    imageButton.setImageResource(array_image.get(i));
                }
jedem imageButton ein Bild zuweisen, es ist aber überall das gleiche Bild drin.

Ich selber dachte das ich den ImageButtons eine id zuweisen muss, was leider auch nicht zum Erfolg geführt hat.
Hier mal die andere Version mit den Id´s
Code:
                for (int i =0;i<array_image.size();i++){
                    imageButton.setId(100+i);
                    imageButton.getId();
                    imageButton.setImageResource(array_image.get(i));
                }
Der Fehler könnte an imageButton.getId(); ,aber ich finde keine andere Lösung.

Vielen Dank
 
Hallo Corey

for (int i =0;i<array_image.size();i++){
imageButton.setImageResource(array_image.get(i));
}
das ist doch logisch , weil imageButton immer der gleiche ist
und das haust du in einer Schleife hintereinader raus . da wirst du immer nur das letzte image sehen
 
  • Danke
Reaktionen: coreytaylor211
@swa00 Ja das habe ich mir schon gedacht. Da hätte ich 2 fragen zu.
1. Die ImageButtons die ich per Code erstelle haben ja keine Id, ist der Weg dann richtig imageButton.setId(100+i); ?

2. Wie spreche ich dann jeden imageButton an in einer schleife ?

Vielen Dank
 
Also ein weg ist , dass du ein dir z.b. eine ArrayList baust

ArrayList < ImageView > myImages = new ArrayList();

Dann ein imageViews erstellen

ImageView mynewImage = new ImageView()
...
..
..

und dann diese der Arraylist hinzufügen

myImages.add (mynewImage);

und dann später

ImageView tmp = myImages.get (0);
tmp.setImageResource(array_image.get(i));
 
  • Danke
Reaktionen: coreytaylor211
Ok habe das jetzt so gemacht, bin total verwirrt, jetzt wird auch nur das letzte Bild angezeigt aber nur eins, die anderen ImageButtons bleiben leer.
 
Ich bin nur ausschliesslich auf das eingegangen , was du oben gefragt hast.

Was hier absolut fehlt , ist dein UI Handling.
Das musst du natürlich anpassen - ich habe dir nur gezeigt , wie man mehrere ImageViews verwendet.

Kann es sein , dass du Grundsätzlich in die falsche Richtung hoppelst un anstatt einem TableLayout eher ein
ListView mit einem CustomAdapter verwenden solltest .

Ich habe da so meine Vermutung
Also warum ein TableLayout ? - was willst du tun ?
 
  • Danke
Reaktionen: coreytaylor211
Also hier einmal meine Methode
Code:
    private void populateButtons() {
        TableLayout tableLayout = (TableLayout)(this.getActivity().findViewById(R.id.tablelayout));
        for (int row =0;row< NUM_ROWS;row++){
            TableRow tableRow = new TableRow(this.getActivity());
            tableRow.setLayoutParams(new TableLayout.LayoutParams(
                    TableLayout.LayoutParams.MATCH_PARENT,TableLayout.LayoutParams.MATCH_PARENT,
                    1.0f
            ));


            for (int col =0;col < NUM_COLS; col++){
                final int FINAL_COL = col;
                final int FINAL_ROW = row;
                ImageButton imageButton = new ImageButton(this.getActivity());
                imageButtonArrayList.add(imageButton);
                ImageButton tmp = imageButtonArrayList.get(0);
                imageButton.setLayoutParams(new TableRow.LayoutParams(
                        TableRow.LayoutParams.MATCH_PARENT,TableRow.LayoutParams.MATCH_PARENT,
                        1.0f
                ));

                // setText to button optional----------

                //------------------------------------

                imageButton.setMinimumWidth(500);
                imageButton.setMinimumHeight(500);
                imageButton.setPadding(0,0,0,0);
                imageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        gridButtonClicked(FINAL_COL,FINAL_ROW);
                    }
                });


                //imageButtonArray[FINAL_ROW][FINAL_COL] = imageButton;
                
                for (int i =0;i<array_image.size();i++){
                    tmp.setImageResource(array_image.get(i));
                    Log.d("test","array_image : " + array_image.get(i));
                }
                tableLayout.addView(tableRow);
                tableRow.addView(imageButton);

            }

        }
    }


Und dazu was ich machen möchte ist bestimmt ganz einfach, ich möchte flexible ImageButtons erzeugen können die mit einem bestimmten Bild belegt sind, das alles in einer scrollView.
Das ist soweit auch alles gut nur halt die Bilder nicht :).
Und da ich jetzt nicht so der Überflieger im Programmieren bin wollte ich nicht wieder von vorne anfangen. :)
 
Hallo Corey,

nicht gefrustet sein , da sind einige Fehler drin.

ich versuche es mal :)

Code:
for (int col =0;col < NUM_COLS; col++){
                final int FINAL_COL = col;
                final int FINAL_ROW = row;

Das final sollte mal da weg

Code:
   ImageButton imageButton = new ImageButton(this.getActivity());
                imageButtonArrayList.add(imageButton);
                ImageButton tmp = imageButtonArrayList.get(0);

Der zuletzt hinzugefügte Imagebutton ist nicht 0, sondern an position col.
Wenn du das schon so machen möchtest, dann musst du auch die Richtige poistion nehmen-
ausserderm ist es quatsch , ein add zu benutzen und dann direkt es wieder mit get anzuwenden.
Wenn du das so machen möchtest , dann erstelle zuerst dein gesamtes Array in einer vorgelagerten Schleife .

Das ist jetzt nur die eventuelle Lösung zu deinem Konzept.
Grundsätzlich ist der Weg eher der Umständliche und auch nicht der Richtige.

Nimm ein ListView oder GridView mit Custom (BaseAdapter) Tabellen sind dazu eher ungeeignet
 
  • Danke
Reaktionen: coreytaylor211
swa00 schrieb:
Hallo Corey,

nicht gefrustet sein , da sind einige Fehler drin.

ich versuche es mal :)

Code:
for (int col =0;col < NUM_COLS; col++){
                final int FINAL_COL = col;
                final int FINAL_ROW = row;

Das final sollte mal da weg

Code:
   ImageButton imageButton = new ImageButton(this.getActivity());
                imageButtonArrayList.add(imageButton);
                ImageButton tmp = imageButtonArrayList.get(0);

Der zuletzt hinzugefügte Imagebutton ist nicht 0, sondern an position col.
Wenn du das schon so machen möchtest, dann musst du auch die Richtige poistion nehmen-
ausserderm ist es quatsch , ein add zu benutzen und dann direkt es wieder mit get anzuwenden.
Wenn du das so machen möchtest , dann erstelle zuerst dein gesamtes Array in einer vorgelagerten Schleife .

Das ist jetzt nur die eventuelle Lösung zu deinem Konzept.
Grundsätzlich ist der Weg eher der Umständliche und auch nicht der Richtige.

Nimm ein ListView oder GridView mit Custom (BaseAdapter) Tabellen sind dazu eher ungeeignet

Also die final angaben kann ich ja nicht weg machen wegen
Code:
                imageButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        gridButtonClicked(FINAL_COL, FINAL_ROW);
                    }
                });
das ist ja wie eine eigene Klasse, und die Werte FINAL_COL und FINAL_ROW werden ja auch nur in der onClick gebraucht.

das ändern von dem letzten ImageButton von 0 nach col hat leider überhaupt keinen Effekt.
Wäre es nicht möglich jeden ImageButton eine Id zu geben und sie dann abzurufen ?
In der ArrayList sollten ja 20 ImageButton liegen aber ich kann dem ImageButton nicht gezielt eine Resource zuweisen.

Ps : Ich weiß das der Weg, nicht der richtige ist, aber ich möchte es gerne Versthen wie ich das so hinbekommen würde.

Vielen Dank
 
So habe es hinbekommen, danke nochmal @swa00
So sieht jetzt die schleife aus
Code:
                for (int o = 0; o < imageArrayList.size(); o++) {
                    imageArrayList.get(o).setImageResource(array_image.get(o));
                }
 

Ähnliche Themen

5
Antworten
22
Aufrufe
1.420
590239
5
R
Antworten
4
Aufrufe
730
Rapidoman
R
Zurück
Oben Unten