2012-12-19 8 views
5

Sono riuscito a creare pulsanti in un ciclo for e non ho visto alcun motivo per non dichiarare le variabili all'interno di esso. Sfortunatamente eclipse identifica solo il "bt" e non vuole sostituire il mio [i] con il numero che rappresenta nel loop e di conseguenza trovare l'id corretto nel mio layout. Qualche idea su come fare questo lavoro? Sono anche grato per qualsiasi altra soluzione come bella come la mia, che non funziona;)Dichiarare le variabili dei pulsanti come un array con un ciclo for android

Button [] bt = new Button[6]; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.start_layout); 

    bt[0] = (Button) findViewById(R.id.bt0); 
    bt[1] = (Button) findViewById(R.id.bt1);//This is what i'm trying to replace 
    bt[2] = (Button) findViewById(R.id.bt2); 
    bt[3] = (Button) findViewById(R.id.bt3); 
    bt[4] = (Button) findViewById(R.id.bt4); 
    bt[5] = (Button) findViewById(R.id.bt5); 


    for (int i=0; i<6; i++) { 
     final int b = i; 
     bt [i] = (Button)findViewById(R.id.bt[i]); <----//Whith this 
     bt [i].setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent myIntent = new Intent(Start.this, MainActivity.class); 
       myIntent.putExtra("players", b); 
       startActivity(myIntent); 

       //startActivity(new Intent(Start.this, MainActivity.class)); 
      } 
     }); 

    } 
} 
+3

'bt [i]' sarà sostituito con 'bt [1]' e non 'bt1' per' i = 1'. Non puoi usare una variabile del genere. –

+0

@RohitJain è per questo che OP fa la domanda. –

+0

ecco una soluzione per il tuo problema http://stackoverflow.com/questions/3648942/dynamic-resource-loading-android – evilone

risposta

11

vorrei fare quanto segue:

private static final int[] idArray = {R.id.bt0, R.id.bt1, R.id.bt2, R.id.bt3, R.id.bt4, R.id.bt5}; 

private Button[] bt = new Button[idArray.length]; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.start_layout); 

    for (int i=0; i<idArray.length; i++) { 
     final int b = i; 
     bt [b] = (Button)findViewById(idArray[b]); // Fetch the view id from array 
     bt [b].setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent myIntent = new Intent(Start.this, MainActivity.class); 
       myIntent.putExtra("players", b); 
       startActivity(myIntent); 

       //startActivity(new Intent(Start.this, MainActivity.class)); 
      } 
     }); 

    } 
} 

Se si desidera aggiungere o rimuovere i pulsanti, aggiungilo a idArray e tutte le altre cose sono già dinamiche.

+0

bella risposta .... +1 – SilentKiller

+0

Abbastanza semplice da capire e davvero bello. Farò una prova non appena avrò iniziato la mia comp. Domani! – Epcilon

+0

Grazie. Contento se aiuta :) –

0

Penso che se si dispone di un gruppo di pulsanti simili - sono tutti posizionati all'interno di 1 padre sul layout (LinearLayout o RelativeLayout o qualcos'altro). Puoi prendere i genitori e recuperare tutti i bambini. In questo modo non è necessario specificare l'id per ciascun pulsante.

ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons); 
List<Button> buttons = new ArrayList<Button>(); 
for (int i = 0; i < buttonsView.getChildCount(); i++) { 
    buttons.add((Button) buttonsView.getChildAt(i)); 
} 

Inoltre è possibile memorizzare il numero del pulsante in essa di tag in modo non è necessario creare final int variabili:

ViewGroup buttonsView = (ViewGroup) findViewById(R.id.buttons); 
List<Button> buttons = new ArrayList<Button>(); 
View.OnClickListener listener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent myIntent = new Intent(Start.this, MainActivity.class); 
     myIntent.putExtra("players", (Integer) v.getTag()); 
     startActivity(myIntent); 
     //startActivity(new Intent(Start.this, MainActivity.class)); 
    } 
}; 
for (int i = 0; i < buttonsView.getChildCount(); i++) { 
    Button button = (Button) buttonsView.getChildAt(i); 
    button.setTag(i); 
    button.setOnClickListener(listener); 
    buttons.add(buttons); 
} 
+0

Voglio solo chiarire, questo funziona solo se il 'ViewGroup' non contiene nient'altro che tutti i pulsanti. Non può contenere nessun altro bambino. –

+0

Grazie per aver dedicato del tempo alla mia domanda Nikita, ma è un po 'oltre la mia comprensione dato che sono abbastanza nuovo alla programmazione. – Epcilon

Problemi correlati