1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Quellcode etwas verkürzen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von afroasiate, 15.11.2010.

  1. afroasiate, 15.11.2010 #1
    afroasiate

    afroasiate Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    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
     
  2. funcoder, 15.11.2010 #2
    funcoder

    funcoder Erfahrener Benutzer

    Beiträge:
    218
    Erhaltene Danke:
    38
    Registriert seit:
    15.08.2009
    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:
     
  3. DieGoldeneMitte, 15.11.2010 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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: 15.11.2010
  4. afroasiate, 15.11.2010 #4
    afroasiate

    afroasiate Threadstarter Neuer Benutzer

    Beiträge:
    7
    Erhaltene Danke:
    1
    Registriert seit:
    11.11.2010
    Danke an euch beide mit Variante 2 bin ich weiter gekommen!!!! Ihr habt mir super geholfen!
     
  5. Fr4gg0r, 15.11.2010 #5
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Sofern du die Buttons namentlich durchnummeriert hast, müsste das auch komplett dynamisch über Reflection machbar sein. :w00t00:

    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: 15.11.2010

Diese Seite empfehlen