我有这个以编程方式生成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);
这样的东西,但它不起作用。
我也试过一系列按钮,但仍然无法正常工作。有什么提示吗?
答案 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()