0

我有一個問題,搞清楚如何使用從數組中添加到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]); 
    } 
} 
+0

您可以使用setId,getId來確定哪個按鈕被點擊 – nikis

+0

我在每個tuneButtons [i]創建時都使用了setId(),而在onClick中我使用了v.getId()並獲得了ID。之後,我嘗試了「tuneButtons [id] .setWidth(400)」,我仍然看到列表中的所有按鈕都受到影響。這就是爲什麼我如此驚慌失措,我嘗試了所有我可能會在評論中看到的東西!感謝您的回答 – Odaym

+0

如果您查看代碼,則完全可以預期這種行爲。通過使用循環,一個監聽器被添加到一組按鈕中。所有的按鈕都得到相同的聽衆,說明相同的行爲... 所以即使我說setId()像'tuneButtons [i] .setId(i);'然後在onClick()我說'int buttonId = v.getId(); tuneButtons [buttonId] .setWidth(400)'..該推理將適用於陣列內的所有按鈕,沒有區分我可以看到 – Odaym

回答

0

它一直在工作,我只是錯誤地使用按鈕上的setWidth()。我錯誤地說,因爲現在我剛剛用setText()進行了測試,文本僅針對有問題的按鈕進行了更改,而不是針對其他任何內容。

當文本發生變化時,我意識到,tableLayout中的所有其他按鈕也隨着問題按鈕的擴展而擴展(以適應正在設置的新文本的大小)。這是TableLayout以這種不需要的方式運行的錯誤。

相關問題