如何在Android中编辑以编程方式创建的按钮?

时间:2014-05-27 15:15:53

标签: java android android-layout android-button

我有这个以编程方式生成GUI的代码

 TableLayout table;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        table = new TableLayout(this);
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        table.setLayoutParams(lp);
        table.setStretchAllColumns(true);

        TableLayout.LayoutParams rowLp = new TableLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
        TableRow.LayoutParams cellLp = new TableRow.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT, 1.0f);
        int count = 0;
        for (int r = 0; r < 3; ++r) {
            TableRow row = new TableRow(this);
            for (int c = 0; c < 3; ++c) {
                count++;
                final Button btn = new Button(this);
                btn.setText("");
                btn.setId(count);

                btn.setOnClickListener(this);

                row.addView(btn, cellLp);
            }
            table.addView(row, rowLp);
        }
        TableRow erow = new TableRow(this);
        Button btn = new Button(this);
        btn.setText("Reset");
        btn.setId(10);
        btn.setOnClickListener(this);
        erow.addView(btn, cellLp);
        table.addView(erow, rowLp);
        setContentView(table);
        }

在监听器中,我可以更改按钮的文本,我点击这个方式

@Override
public void onClick(View v) {
    Button btn = (Button)v;
    btn.setText("text");
    }

但是,我如何与其他按钮互动?我尝试了btn = (Button)findViewById(7);这样的东西,但它不起作用。 我也试过一系列按钮,但仍然无法正常工作。有什么提示吗?

2 个答案:

答案 0 :(得分:1)

findViewById()主要用于通过扩展XML布局文件创建的视图。

虽然您可以为setId()调用视图,但在这种情况下,您应该只是简单地引用以编程方式创建的视图,即

private Button button1;

然后只使用这些字段。

答案 1 :(得分:0)

尝试使用Tag而不是id作为按钮:

for (...) {
    count++;
    final Button btn = new Button(this);
    ...
    btn.setTag(count);
    btn.setOnClickListener(this);
    ...
}

在听众中呼叫(Integer)v.getTag()