java - 为什么我不能为动态创建的按钮设置启用(假)

标签 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();

    }

所以我得到了我所有的网格 child ,但是当时间结束时我仍然可以点击这个按钮。为什么他们没有残疾?你能帮我吗?

<小时/>

解决方案:

需要明确的是,我更正了 @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);
                    }
                    }

这做同样的事情,但适合我发布的代码。有人能派上用场吗?

最佳答案

TableLayout 的 subview 是您添加的各种 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);

关于java - 为什么我不能为动态创建的按钮设置启用(假),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23975360/

相关文章:

java - 如何在 Rhino 中获取当前脚本名称和行号?

java - 如何使用FragmentTransaction的add()方法在RelativeLayout中设置Fragment

android - 自定义 View 未使用 ExpandableListView 上的 OnGroupClickListener 进行更新

android - 具有一行而不是两行文本的线性布局中按钮的奇怪行为

android - ImageView 未按预期填充父级

android - 当我使其中一个 View 无效时,为什么我的布局会完全重绘?

java - 自动将长行的 Java 代码重新格式化为 80 列并仍然可以编译?

java - Camel AggregationStrategy 为下一次聚合迭代保留排除的消息

java - 数字自签名认证更新到期日期

android - Gradle 构建在 OSX 上的 Android Studio 旧版本和新版本上失败