我正在使用TableLayout和TableRow创建6/6网格按钮。
private Button myButton;
private static final int a=7;
private static final int b=7;
private void createLayoutDynamically() {
won = (TableLayout)findViewById(R.id.won);
for ( int qq = 1; qq < a; qq++) {
TableRow tableRow = new TableRow(this);
tableRow.setLayoutParams(new TableLayout.LayoutParams(
TableLayout.LayoutParams.MATCH_PARENT,
TableLayout.LayoutParams.MATCH_PARENT,
2
));
won.setPadding(20,20,20,20);
won.addView(tableRow);
for ( int q = 1; q < b; q++) {
myButton = new Button(this);
}
}
}
我还实施了CounDownTimme,当时间结束时我想禁用onclick到我网格中的所有按钮。
public void inittimer(){
lol =new CountDownTimer(czass, 100) {
public void onTick(long millisUntilFinished) {
czass = millisUntilFinished;
czas.setText("" + millisUntilFinished / 1000);
}
public void onFinish() {
layout2.setVisibility(View.VISIBLE);
for ( int i = 0; i < won.getChildCount(); i++ ){
View view = won.getChildAt(i);
view.setEnabled(false);
}
}
}.start();
}
所以我得到了所有的网格孩子,但是当时间结束时我仍然可以点击这个按钮。为什么他们没有残疾?你可以帮助我吗?
解决方案:
要清楚,我更正了@ matiash的代码以适合我的代码:
Button buttons [][]= new Button[a][b];
for (int i=1;i<buttons.length;i++) {
for (int j=1;j<buttons[i].length;j++) {
Button btn = buttons[i][j];
btn.setEnabled(false);
}
}
这样做也适用于我发布的代码。有人会派上用场。
答案 0 :(得分:2)
TableLayout
的子视图是您添加的各种TableRow
,而不是按钮本身。
您可以更改此代码以迭代TableLayout
的所有“孙子”,但我建议更简单的替代方法:保留您添加的所有按钮的列表,然后迭代它。例如:
mAllButtons = new ArrayList<Button>();
for ( int q = 1; q < b; q++) {
myButton = new Button(this);
mAllButtons.add(myButton);
}
然后,后来:
for (Button b : mAllButtons)
b.setEnabled(false);
答案 1 :(得分:0)
这种情况正在发生,因为getChildAt()
会返回View
:在调用setEnabled()
时,您正在更改View
的状态,而不是Button
。< / p>