Quellcode etwas verkürzen

A

afroasiate

Neues Mitglied
1
Hallo,

ich möchte bei mir im Quellcode etwas verkürzen. Ich habe im Moment etwa 30 ImageButtons welche ich für ein Spielfeld brauche, dazu muss jedoch jeder Button Initialisiert werden.

Code:
 public void onCreate(Bundle savedInstanceState) {

    	super.onCreate(savedInstanceState);
        setContentView(R.layout.setzen);
        
        zelle00 = (ImageButton)this.findViewById(R.id.zelle00);
        zelle00.setOnClickListener(this);

        zelle01 = (ImageButton)this.findViewById(R.id.zelle00);
        zelle01.setOnClickListener(this);
        .
        .
        .

Jetzt dachte ich daran das Initialisieren zu vereinfachen bzw. zu verkürzen.
Ich dachte an folgendes:

Code:
    	buttonlist= new ImageButton[]{zelle00,zelle10,zelle20,zelle30,zelle40,zelle01,zelle11,zelle21,zelle31,zelle41,zelle51,zelle02,zelle12,zelle22,zelle32,zelle42,zelle52,zelle03,zelle13,zelle23,zelle33,zelle43,zelle53,zelle04,zelle14,zelle24,zelle34,zelle44,zelle54};

       for(int i=0; i<30;i++) {
        	buttonlist[i]=(ImageButton)this.findViewById(R.id.xxxx]);
       }

Nur was schreibe ich hinten bei R.id.????? Die ID´s in der XML Datei heissen genauso die Bezeichnungen im buttonlist Array. R.id erwartet eine Variable vom Typ int.


Kann mir wer helfen?


cu
afro
 
Mhh, das einzige was mir jetzt einfällt, wäre einen extra Array für die Ids zu erstellen also:

int idOfObjects[] = new int[10];
idOfObjects[0] = R.id.zelle0;

und dann entsprechend:

buttonlist=(ImageButton)this.findViewById(idOfObjects);

Denn jedes XML Element, besitzt nur eine Variable vom Typ int, die genauso heißt, allerdings "hintenrum" als eindeutigen/weiterlaufenden Integer verarbeitet wird.

Was besseres fällt mir jetzt auch nicht ein :winki:
 
Man muss die ids in ein array tun und kann dann ein passendes ImageButton-array dazu aufbauen:

Code:
static init ids[] = new int[] { R.id.id0, R.id.id1, ... };
...
ImageButton[] buttons = new ImageButton[ids.length];
for( int i=0; i<ids.length; i++ ) {
  buttons[i] = (ImageButton) findViewById( ids[i] );
  buttons[i].setOnClickListener(this);
}

Das R.id könntest Du sogar mit einem static import loswerden - das würde ich aber nicht tun, weil Dir das deinen Namespace ver"hurt". ;-)
 
Zuletzt bearbeitet:
Danke an euch beide mit Variante 2 bin ich weiter gekommen!!!! Ihr habt mir super geholfen!
 
Sofern du die Buttons namentlich durchnummeriert hast, müsste das auch komplett dynamisch über Reflection machbar sein. :scared:

Code:
final Class c = R.id.class;
Field[] fields = c.getFields();
ArrayList<Integer> ids = new ArrayList<Integer>();
for(Field f: fields){         
               if(f.getName().startsWith("layout_1_button_"))ids.add(f.getInt(null));
}
Und dann
Code:
int count = ids.size();
ImageButton[] buttons = new ImageButton[count];
for(int i = 0; i<count; i++) { //angeblich schneller als erweiterte for
  buttons[i] = (ImageButton) findViewById( ids.get(i) );
  buttons[i].setOnClickListener(this);
}
 
Zuletzt bearbeitet:

Ähnliche Themen

A
  • Andy12345678
Antworten
7
Aufrufe
1.071
BOotnoOB
BOotnoOB
L
Antworten
4
Aufrufe
1.336
LarsBadm31
L
M
  • Manuel1805
Antworten
2
Aufrufe
792
Manuel1805
M
Zurück
Oben Unten