2011-10-27 85 views
1

我試圖在屏幕上隨機佈置10個編號爲1-10的圖像按鈕。 我使用數組列表和Collections.shuffle命令來洗牌背景可繪製。 但我似乎無法將按鈕偵聽器綁定到這些隨機圖像。使用與洗牌匹配的按鈕洗牌圖像

// assigned arrays here 
Button[] buttons = new Button[10]; 
Button[] buttonimages = new Button[10]; 
List<Button> list; 
// Global Variables 
int[] buttonarray =  {R.drawable.button1,R.drawable.button2,R.drawable.button3,R.drawable.button4,R.drawable.but  ton5,R.drawable.button6,R.drawable.button7,R.drawable.button8,R.drawable.button9,R.drawable .button10}; 
int idarray[] = {R.id.number1,R.id.number2,R.id.number3,R.id.number4,R.id.number5,R.id.number6,R.id.number7,R.id.number8,R.id.number9,R.id.number10}; 

//然後我添加到ArrayList和洗牌 公共無效randomnumbers2(){

for (int z=0;z<10;z++) { 
     buttons[z] = (Button)findViewById(idarray[z]); 
    } 
    for (int k=0;k<10;k++) { 
     buttonimages[k] = (Button)findViewById(buttonarray[k]); 
    } 
list = new ArrayList<Button>(10); 
    for(int i = 0; i < 10; i++) list.add(buttons[i]); 
    Collections.shuffle(list); 

    for (int z=0;z<10;z++) { 
     buttons[z] = (Button)findViewById(idarray[z]); 
    } 

    for (int j=0;j<10;j++){ 
     Button b1 = (Button) findViewById(idarray[j]); 
     ((Button) list.set(j, buttons[j])).setBackgroundResource(buttonarray[j]); 
    } 
}  

但我的按鈕被這樣定義: 設置按鈕 button1的=(按鈕)findViewById(R .id.number1); button2 =(Button)findViewById(R.id.number2); button3 =(Button)findViewById(R.id.number3); button4 =(Button)findViewById(R.id.number4); button5 =(Button)findViewById(R.id.number5);按鈕6 =(按鈕)findViewById(R.id.number6); button7 =(Button)findViewById(R.id.number7); button8 =(Button)findViewById(R.id.number8);按鈕9 =(按鈕)findViewById(R.id.number9); button10 =(Button)findViewById(R.id.number10);

問題是,當我點擊第一個按鈕時, 。它有一個5號圖像,在第一個位置,但它仍然與按鈕#1相關聯。基本上我有2行5個數字混合起來。我希望按鈕單擊以響應按鈕5,而不是按鈕1。

+0

請完成描述您的問題。 – PH7

+0

對不起,你不知道那裏發生了什麼。完成描述: – huskyd97

+0

它有一個5號圖像,在第一個位置,但它仍然與按鈕#1相關聯。基本上我有2行5個數字混合起來。我希望按鈕單擊以響應按鈕5,而不是按鈕1。希望是有道理的。 thx – huskyd97

回答

1

爲了讓您一開始,

LinearLayout ll; 
ArrayList<Button> buttons = new ArrayList<Button>(); 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // create a layout 
    ll = new LinearLayout(this); 
    ll.setOrientation(LinearLayout.VERTICAL); 

    for (int i = 0; i < 10; i++) { 
     buttons.add(createButton(i)); 
    } 
    Collections.shuffle(buttons); 

    for (Button b : buttons) { 
     ll.addView(b); 
    } 

    setContentView(ll); 

} 

private Button createButton(final int i) { 
    Button b = new Button(this); 
    b.setText(i + ""); 
    b.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(), 
        "Clicking button: " + i, Toast.LENGTH_SHORT).show(); 
     } 

    }); 
    b.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
      LayoutParams.WRAP_CONTENT)); 
    return b; 
} 

在這裏,我只是想創建按鈕和設置指數顯示文本。你可以設置你的背景資源爲圖片或任何你想要的。希望這可以幫助。


要有2行5個按鈕,您需要三個線性佈局。這裏我們去代碼...

LinearLayout ll; 
    ArrayList<Button> buttons = new ArrayList<Button>(); 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // create main layout which will host two linear layouts vertically 
     ll = new LinearLayout(this); 
     ll.setOrientation(LinearLayout.VERTICAL); 

     //create another two linear layouts which will host 5 buttons horizontally 
     Linear linearLayout1 = new LinearLayout(this); 
     Linear linearLayout2 = new LinearLayout(this); 

     for (int i = 0; i < 10; i++) { 
      buttons.add(createButton(i)); 
     } 
     Collections.shuffle(buttons); 

     //add first 5 buttons to first layout 
     for (int i=0;i<5;i++) { 
      linearLayout1.addView(buttons.get(i)); 
     } 
     //add remaining 5 to second layout 
     for (int i=5;i<10;i++){ 
      linearLayout2.addView(buttons.get(i)); 
     } 
    //add two layouts to main layout 
     ll.addView(linearLayout1); 
     ll.addView(linearLayout2); 


    //set main linear layout to be main layout of the actvitiy. 
     setContentView(ll); 

    } 

    private Button createButton(final int i) { 
     Button b = new Button(this); 
     b.setText(i + ""); 
     b.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), 
         "Clicking button: " + i, Toast.LENGTH_SHORT).show(); 
      } 

     }); 
     b.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 
       LayoutParams.WRAP_CONTENT)); 
     return b; 
    } 
+0

謝謝我認爲這是我正在尋找的東西,我給它一個鏡頭,並發表迴應。 – huskyd97

+0

看起來像這樣可能工作,但最後的觀點是顯示我的一個按鈕填滿整個屏幕,或者只是顯示陣列列表的最後一個按鈕,或者我缺少佈局視圖的東西。對不起,我只是習慣於使用xml進行佈局,對於動態佈局來說很弱。謝謝 – huskyd97

+0

我想要的視圖是2行,每行5個按鈕水平排列。 – huskyd97