Android 从一个clicklistener引用特定按钮
我在计算如何使用我添加到TableLayout的按钮列表中的一个唯一按钮时遇到了一个问题,该列表是从一个数组添加到TableLayout的 下面是我用来完成这项工作的代码,我现在看到的行为自然是按钮都会响应侦听器。我希望被点击的按钮和单独的按钮以某种方式运行 我在数组中的按钮声明上尝试了setTagi的组合,然后在侦听器中获取并使用该值作为数组的索引,但没有效果 我还测试了从数组中为索引0处的按钮显式指定监听器,它真正做的是只向指定的按钮添加监听器,但是当单击该按钮时,其余按钮也会响应 理想情况下,下面的代码就是我想要实现的,只要点击按钮,按钮的宽度就会增加到300px左右。当我在其他项目中做的比我记忆中更多的时候,我被这件事吓坏了 任何帮助都将不胜感激,谢谢Android 从一个clicklistener引用特定按钮,android,arrays,android-layout,android-button,android-tablelayout,Android,Arrays,Android Layout,Android Button,Android Tablelayout,我在计算如何使用我添加到TableLayout的按钮列表中的一个唯一按钮时遇到了一个问题,该列表是从一个数组添加到TableLayout的 下面是我用来完成这项工作的代码,我现在看到的行为自然是按钮都会响应侦听器。我希望被点击的按钮和单独的按钮以某种方式运行 我在数组中的按钮声明上尝试了setTagi的组合,然后在侦听器中获取并使用该值作为数组的索引,但没有效果 我还测试了从数组中为索引0处的按钮显式指定监听器,它真正做的是只向指定的按钮添加监听器,但是当单击该按钮时,其余按钮也会响应 理想情况
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]);
}
}
它一直在工作,我只是错误地在按钮上使用了setWidth。我这样说是错误的,因为现在我只是用setText测试了一下,文本只针对有问题的按钮进行了更改,没有针对其他任何东西进行更改
但是,当文本发生变化时,我确实意识到,tableLayout中的所有其他按钮也随着相关按钮的扩展而扩展,以适应正在设置的新文本的大小。这是TableLayout以这种不必要的方式运行的错误。您可以使用setId、getId来确定单击了哪个按钮。在每个tuneButtons[i]创建时,我都使用了setId,而在onClick中,我使用了v.getId并取回了ID。之后,我尝试了tuneButtons[id].setWidth400,但仍然看到列表中的所有按钮都受到影响。这就是为什么我如此惊讶,我已经尝试了所有我可能会在评论中看到的东西!感谢您的回答。如果您查看代码,行为完全符合预期。通过使用循环,一个监听器被添加到按钮数组中。所有按钮都得到相同的侦听器,声明相同的行为。。。所以即使我说setId像tunebutions[I].setIdi;然后在onClick里面我说int buttonId=v.getId;tuneButtons[buttonId].setWidth400。。这种推理将适用于数组中的所有按钮,我看不到任何区别