1. Wir haben diesmal 2 Gewinnspiele zeitgleich für euch - Gewinne einmal ein UMI Plus E - Beim 2ten könnt ihr ein Nomu S30 gewinnen!
  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,232
    Erhaltene Danke:
    257
    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