2013-05-07 19 views
5

Desidero creare più ImageButtons a livello di codice. Sono in grado di creare loro, ma l'ascoltatore di eventi click continua a ricevere la stessa vista (tasto 2), se clicco sul tasto 0, button1 o il pulsante 2.Creazione di Imagebutton a livello di codice

RelativeLayout gameBoard = (RelativeLayout) findViewById(R.id.RelGameboard); 

    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    lp.addRule(RelativeLayout.CENTER_IN_PARENT,1); 

    for(int i = 0 ; i < 3 ; i++) 
    { 

     ImageButton btnGreen = new ImageButton(this); 
     btnGreen.setImageResource(R.drawable.bola_verde); 
     btnGreen.setLayoutParams(lp); 
     btnGreen.setOnClickListener(mGreenBallOnClickListener); 
     btnGreen.setBackgroundColor(Color.TRANSPARENT); 
     btnGreen.setTag(i); 
     btnGreen.setId(i); 

        gameBoard.addView(btnGreen); 


    }' 

Click ascoltatore:

private View.OnClickListener mGreenBallOnClickListener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     //check which green ball was clicked 
     ImageButton imgBtn = (ImageButton) v; 

    Log.i("greeny","Clicked on green ball->"+imgBtn.getTag()+" v.ID->"+v.getId()); 
    } 
}; 

Per ogni imagebutton disegnato, quando faccio clic Ottengo: Clic su green ball-> 2 v.ID-> 2

I pulsanti sono in posizioni diverse (ho impostato un riempimento diverso per ognuno di essi ma per semplificare il codice non l'ho messo qui)

risposta

0

Ciò accade perché non si imposta il layout del pulsante, il pulsante Tutto nella stessa posizione.

Use Aboveof,Belowof,left,right,center 

Example

params.addRule(RelativeLayout.ALIGN_PARENT_ABOVE); 
    relativeLayout.addView(button, params); 
+0

Mi dispiace semplificato il codice e nascondere le imbottiture che ho impostato dopo tale definizione. I pulsanti sono in posti diversi. – TranT

9

Prova ad aggiungere un onClickListener - EDIT

private View.OnClickListener ClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     int selected_item = (Integer) v.getTag(); 
    } 
}; 

provare a creare una matrice di ImageButtons -

ImageButton[] btnGreen = new ImageButton[3]; 

for (int i = 0; i < 3; i++) { 
    btnGreen[i] = new ImageButton(this); 
    btnGreen[i].setImageResource(R.drawable.bola_verde); 
    btnGreen[i].setLayoutParams(lp); 
    btnGreen[i].setOnClickListener(ClickListener); 
    btnGreen[i].setBackgroundColor(Color.TRANSPARENT); 
    btnGreen[i].setTag(i); 
    btnGreen[i].setId(i); 

    gameBoard.addView(btnGreen[i]); 
} 
+0

erm .. Lo faccio già .. Continuo a ricevere lo stesso tag questo è il problema. Ricevo lo stesso pulsante in quel parametro "View v" – TranT

+0

Controlla il codice aggiornato ... –

+0

che si arresta in modo anomalo. non si inizializza nemmeno ogni oggetto ImageButton. – TranT

0

provare questo codice:

RelativeLayout gameBoard = (RelativeLayout)findViewById(R.id.RelGameboard); 

ImageButton[] imageButtons; 

private final int NUMBER_OF_IMAGE_BUTTONS = 5; //your number of image buttons 

RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 

lp.addRule(RelativeLayout.CENTER_IN_PARENT,1); 

imageButtons = new ImageButton[NUMBER_OF_IMAGE_BUTTONS]; 

for(int i = 0 ; i < NUMBER_OF_IMAGE_BUTTONS; i++){ 
    imageButtons[i] = new ImageButton(this); 
    imageButtons[i].setImageResource(R.drawable.bola_verde); 
    imageButtons[i].setLayoutParams(lp); 
    imageButtons[i].setOnClickListener(mGreenBallOnClickListener); 
    imageButtons[i].setBackgroundColor(Color.TRANSPARENT); 
    imageButtons[i].setTag(i); 
    imageButtons[i].setId(i); 
    gameBoard.addView(imageButtons[i]); 
} 
Problemi correlati