1

正在创建一个表,以便:

    TableLayout layout = new TableLayout(this);
    layout.setLayoutParams(new TableLayout.LayoutParams(4,5));
    layout.setPadding(1, 1, 1, 1);

    for(int i=0; i<7; i++) {
        TableRow tr = new TableRow(this);
        for(int j=0; j<6; j++) {
            Button b = new Button(this);
            b.setText("0");
            b.setOnClickListener(buttonListener);
            tr.addView(b);
        }
        layout.addView(tr);
    }

    super.setContentView(layout);

OnClickListener buttonListener

View.OnClickListener buttonListener = new View.OnClickListener() {
    public void onClick(View v) {
        Button thisButton = (Button) findViewById(((Button)v).getId());
        //thisButton.setText(Integer.toString(Integer.parseInt((String) thisButton.getText()) + 1));
        thisButton.getText();
    }
};

调用thisButton.getText()抛出 NullPointerException,我不知道为什么。谁能帮我吗?

4

5 回答 5

0
    TableLayout layout = new TableLayout(this);
            layout.setLayoutParams(new TableLayout.LayoutParams(4,5));
            layout.setPadding(1, 1, 1, 1);

            for(int i=0; i<7; i++) {
                TableRow tr = new TableRow(this);
                for(int j=0; j<6; j++) {
                    Button b = new Button(this);
                    b.setText("0");
                    b.setOnClickListener(buttonListener);
                    tr.addView(b);
                }
                layout.addView(tr);
            }

            setContentView(layout);
}
     View.OnClickListener buttonListener = new View.OnClickListener() {
                public void onClick(View v) {
                    Button btn1 = (Button)v;
                    //thisButton.setText(Integer.toString(Integer.parseInt((String) thisButton.getText()) + 1));
                    String name = btn1.getText().toString();                    
                }
            };

我已经测试过这会起作用。当您动态创建视图时,您不会为其分配 id。您使用视图的对象工作。我希望对所有好奇为动态按钮设置 id 的人都有意义。

于 2012-10-09T06:17:47.997 回答
-1

您可以简单地从传递的视图中获取文本,而不是重新创建按钮。

public void onClick(View v) {
    if(v instanceof Button)
        String text = ((Button) v).getText();
}
于 2012-10-09T05:29:24.797 回答
-1

假设:

  1. 我看不到任何关于将 id 设置为按钮的信息
  2. 下面的行可能会导致异常:

按钮 thisButton = (Button) findViewById(((Button)v).getId());

你为什么这样做?相反,您已经在点击操作中传递了一个视图:View v

所以你可以直接做:

String strText = ((Button) v).getText();
于 2012-10-09T05:30:07.860 回答
-1

这意味着您的 thisButton 可能为空,因为之前的语句不成功。

按钮 thisButton = (Button) findViewById(((Button)v).getId());

看起来不对。通常 findViewById() 中的参数应该是资源 id。如

按钮 thisButton = (Button) findViewById(R.id.button);

R.id.button 由您的布局 xml 定义。

于 2012-10-09T05:31:52.020 回答
-1

您的代码中存在一个问题。

没有设置 Button 的 id

        b.setText("0");
        b.setOnClickListener(buttonListener);
        b.setId(i);
于 2012-10-09T05:37:28.047 回答