2012-03-18 85 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();