2013-05-07 19 views
5

Chcę programowo utworzyć kilka przycisków ImageButtons. Jestem w stanie je stworzyć, ale słuchacz odbiera zdarzenia click utrzymuje ten sam pogląd przycisk (2), czy mogę kliknąć na przycisk 0, Button1 lub przycisk 2.Tworzenie programowalnie Imagebutton

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); 


    }' 

Kliknij wydarzenie słuchacza:

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()); 
    } 
}; 

Dla każdego narysowanego przycisku grafiki, gdy kliknę przycisk I get: Kliknięto zieloną kulkę-> 2 v.ID-> 2

Przyciski znajdują się w różnych pozycjach (dla każdego z nich ustawię różne wypełnienia, ale w celu uprość kod, którego tutaj nie umieściłem)

Odpowiedz

0

Dzieje się tak, ponieważ nie ustawiono układu przycisku, Wszystkie przyciski w tym samym miejscu.

Use Aboveof,Belowof,left,right,center 

Example

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

Niestety ja uproszczony kod i ukryć Podkładki że ustawiony po tej definicji. Przyciski znajdują się w różnych miejscach. – TranT

9

do wpisu onClickListener -

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

EDIT

generując tablicę 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 .. Już to robię ... Ciągle otrzymuję ten sam tag, to jest problem. Otrzymuję ten sam przycisk w tym parametrze "Widok v" – TranT

+0

Sprawdź zaktualizowany kod ... –

+0

, który ulegnie awarii. nie uruchamiasz nawet każdego obiektu ImageButton. – TranT

0

Spróbuj ten kod:

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]); 
} 
Powiązane problemy