【问题标题】:Assign Text of 2d array of buttons分配二维按钮数组的文本
【发布时间】:2014-04-28 14:40:25
【问题描述】:

在 android 中,我有一系列按钮,我这样声明 按钮网格[][] = 新按钮[3][3];

然后我设置确实存在的 grid[0][0] = (Button)findViewById(R.id.Middle_Middle)

当我尝试通过

更改它的文本时

调用 grid[0][0].setText("U");

我崩溃了。我知道这不是数组的声明或设置,因为它只会在我进入用于设置文本的函数时崩溃。关于为什么会崩溃的任何想法

【问题讨论】:

  • 如果您发布您的 Logcat 会有所帮助。

标签: android arrays button


【解决方案1】:

如果 Button.setText() 抛出 NullPointerException,则布局中的按钮 (R.id.Middle_Middle) 当前不得膨胀/存在于内容视图中。

由于 Button grid[][] = new Button[3][3];实际上并没有创建您尝试访问的按钮,它会在您尝试设置文本时抛出 NPE(因为您的 findViewById() 方法在尝试设置单个按钮时返回 null)。

您需要在访问按钮之前实际实例化它们。

例如。

Button grid[][] = new Button[3][3];
for(int i = 0; i < grid.length; i++){
   for(int j = 0; j < grid[i].length; j++) {
           grid[i][j] = new Button(context);
           parent.addView(grid[i][j]);
       }
}

除非您使用 findViewById() 为每个按钮手动设置按钮,但在多维数组中保留对按钮的引用似乎需要做很多额外的工作。

【讨论】:

    【解决方案2】:

    您确定 findViewByID(R.id.Middle_Middle) 返回的不是空元素吗?

    确保首先对布局进行 setContentView,然后再获取元素。

    【讨论】:

    • 是的。我通过设置它来尝试它 Button t = (Button)findviewById(R.id.Middle_Middle);然后 t.setText("U");它有效,但在数组中却没有。
    • 我认为这是我的问题,我在执行 setContentView 之前就这样做了
    • Jums... 可以添加 logcat 崩溃报告吗?
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 2013-11-24
    相关资源
    最近更新 更多