为什么我不能为创建的动态按钮设置setEnable(false)

时间:2014-05-31 23:24:00

标签: java android android-layout android-button

我正在使用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);
                    }
                    }

这样做也适用于我发布的代码。有人会派上用场。

2 个答案:

答案 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>

API reference