2012-03-18 122 views
1

我以編程方式創建按鈕,取決於某些因素,它們將是3或4按鈕。Android禁用所有按鈕

在某些情況下,我想創建所有的按鈕,但全部禁用它們。此刻,我的問題是,我不能從外部訪問這個循環

if (4val != null && 4val.length() > 0){ 
     Button b4 = new Button(this); 
     b4.setText(answer4val); 
     b4.setTextSize(18); 
     layout.addView(b4, layoutParams); 
     b4.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       reason(4); 
      } 
     }); 
    } 

我想if語句來禁用/啓用所有按鈕的這些外部的按鈕。這可能嗎?

回答

0

聲明他們在更廣闊的scopre(也許爲類成員):

// in the class scope 
Button b4 = null; 

// in the method scope 
if (4val != null && 4val.length() > 0){ 
    b4 = new Button(this); 
    b4.setText(answer4val); 
    b4.setTextSize(18); 
    layout.addView(b4, layoutParams); 
    b4.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      reason(4); 
     } 
    }); 
} 
0

不要建立在循環的按鈕。爲類設置按鈕字段,並且您可以在整個課程中訪問它們。然後在那個循環中初始化它們。

如果你只用一種方法需要它們,你可以使它們成爲本地的方法而不是類的字段。

0

當然,你可以保存按鈕的列表,如果你想關閉你有按鈕上

ArrayList<Button> buttons = new ArrayList<Button>(); 

if (4val != null && 4val.length() > 0){ 
    Button b4 = new Button(this); 
    b4.setText(answer4val); 
    b4.setTextSize(18); 
    layout.addView(b4, layoutParams); 
    b4.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      reason(4); 
     } 
    }); 
    buttons.add(b4); 
} 

foreach(Button b : buttons) { 
    b.setEnable(false); 
} 
0

做的東西對他們以後根據你想如何禁用它們兩個可選的方法:

button.setClickable(false); 
button.setVisibility(int visibility); 

第一將使setOnCLickListener無用 第二個將設置參數的可見性,以「看得見」,「不可見」,或「水漲船高」

禁用它們循環外還必須之前初始化它們,並將其添加到視圖前加

b4.setId();