我在解决如何使用从阵列中添加到TableLayout的按钮列表中的1个唯一按钮时遇到问题。
下面是我用来完成这项工作的代码,我现在看到的行为(自然地)按钮都响应了监听器。我希望单击的按钮(以及单独的按钮)以某种方式运行。
我尝试过对数组中按钮声明的setTag(i)组合,然后在侦听器内部我使用getTag()并使用该值作为数组的索引,但无济于事。
我还测试了从数组中为索引0处的按钮显式指定侦听器,这样做的确是仅将侦听器添加到该指定按钮,但是当单击该按钮时,其余按钮也会响应。 / p>
理想情况下,下面的代码是我想要实现的,只要点击它,按钮的宽度就会增加到大约300px。在我做完这件事的时候,我比其他项目更难以理解......
任何帮助都将不胜感激,谢谢。
private void initializeTableRows(TableLayout stringsTable) {
// TODO Auto-generated method stub
String[] strings = { "d", "g", "d", "g", "b", "d" };
addRowsToTable(strings, stringsTable);
}
private void addRowsToTable(String[] strings, TableLayout stringsTable) {
TableRow tableRows[] = new TableRow[strings.length];
Button[] stringNames = new Button[strings.length];
final Button[] tuneButtons = new Button[strings.length];
for (int i = 0; i < strings.length; i++) {
stringNames[i] = new Button(this);
stringNames[i].setBackgroundResource(R.drawable.red_frame);
stringNames[i].setText(strings[i].toUpperCase());
stringNames[i].setTextColor(Color.WHITE);
tuneButtons[i] = new Button(this);
tuneButtons[i].setBackgroundResource(R.drawable.red_frame);
tuneButtons[i].setTextColor(Color.WHITE);
tuneButtons[i].setText("Tune");
tuneButtons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Button clickedButton = (Button) v;
clickedButton.setWidth(300);
}
});
tableRows[i] = new TableRow(this);
tableRows[i].addView(stringNames[i]);
tableRows[i].addView(tuneButtons[i]);
tableRows[i].setPadding(0, 0, 0, 40);
stringsTable.addView(tableRows[i]);
}
}
答案 0 :(得分:0)
它一直在使用,我只是错误地在按钮上使用了setWidth()。我错误地说,因为现在我刚用setText()进行了测试,文本仅针对有问题的按钮进行了更改,而不是其他任何内容。
我在文本发生变化时所意识到的是,tableLayout中的所有其他按钮也随着所讨论的按钮的扩展而扩展(以适应所设置的新文本的大小)。这是TableLayout以这种不受欢迎的方式运行的错误。