我有一個問題,搞清楚如何使用從數組中添加到TableLayout的按鈕列表中的1個獨特按鈕。從一個Clicklistener引用特定的按鈕
下面是我用來完成此操作的代碼,我現在看到的行爲是(自然)所有按鈕都會響應偵聽器。我希望被點擊的按鈕(以及單獨的按鈕)以某種方式表現。
我試過setTag(i)對數組中按鈕聲明的組合,然後在偵聽器中我getTag()並使用該值作爲數組的索引,但無濟於事。
我還測試瞭如何爲數組中的索引0明確指定偵聽器,這樣做確實是只將偵聽器添加到指定的按鈕,但是當單擊該按鈕時,其他響應也會響應。
理想情況下,下面的代碼是我想要實現的,只要點擊按鈕的寬度增加到約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]);
}
}
您可以使用setId,getId來確定哪個按鈕被點擊 – nikis
我在每個tuneButtons [i]創建時都使用了setId(),而在onClick中我使用了v.getId()並獲得了ID。之後,我嘗試了「tuneButtons [id] .setWidth(400)」,我仍然看到列表中的所有按鈕都受到影響。這就是爲什麼我如此驚慌失措,我嘗試了所有我可能會在評論中看到的東西!感謝您的回答 – Odaym
如果您查看代碼,則完全可以預期這種行爲。通過使用循環,一個監聽器被添加到一組按鈕中。所有的按鈕都得到相同的聽衆,說明相同的行爲... 所以即使我說setId()像'tuneButtons [i] .setId(i);'然後在onClick()我說'int buttonId = v.getId(); tuneButtons [buttonId] .setWidth(400)'..該推理將適用於陣列內的所有按鈕,沒有區分我可以看到 – Odaym