[英]Edit dynamically created button in android
我正在研究一個android服務器客戶端應用程序。 android應用程序和服務器之間存在連接。 根據服務器的第一條消息,在屏幕上創建並顯示許多按鈕。 這個數字通常在1到10之間。我不想在我的活動中初始化10個按鈕,因為將來,按鈕的數量可能會增加到20個。
這是我初始化按鈕並在屏幕上顯示它們的方式:
actionButtons = server.getActionButtons();
TableLayout buttonLayout =
(TableLayout) rootView.findViewById(R.id.tblLayoutButtons);
for(int i=0; i< actionButtons.length; i++)
{
btnAction.setWidth(100);
btnAction.setHeight(50);
btnAction.setTag(actionButtons[i]);
btnAction.setText(actionButtons[i].getName());
btnAction.setOnClickListener(btnActionClick);
buttonLayout.addView(btnAction);
}
這一切都運作良好。 但我的問題是服務器每3秒發送一次按鈕的狀態更新。 每個按鈕代表一個燈,可以打開或關閉。 “ON”按鈕應該具有另一個背景,而不是“OFF”按鈕。 每次收到服務器的更新時,都應更新按鈕。
怎么可以這樣做?
如果要更改已創建的Button的狀態,則在運行時創建它們時,使用View類中的setID(int)方法為它們分配唯一的Id。
所以對於你的button1,你可以,
button1.setId(100);
當你想要改變時,你可以獲取按鈕的ID並適當地改變它。
if(toChangeButton.getID() == 100){
//Change button1
}
希望這可以幫助。
我會這樣做:
public void createButtons() {
actionButtons = server.getActionButtons();
TableLayout buttonLayout = (TableLayout) rootView.findViewById(R.id.tblLayoutButtons);
for(int i=0; i< actionButtons.length; i++)
{
btnAction.setWidth(100);
btnAction.setHeight(50);
btnAction.setTag(actionButtons[i]);
btnAction.setText(actionButtons[i].getName());
btnAction.setOnClickListener(btnActionClick);
btnAction.setId(i);
buttonLayout.addView(btnAction);
}
}
public void updateButton() {
//Get the ID of the button to toggle from the server and get the related view
ToggleButton buttonToToggle = (ToggleButton) findViewById(Integer.parseInt(server.getMessage()));
if (buttonToToggle.isChecked()) {
buttonToToggle.setChecked(false);
buttonToToggle.setBackground(R.drawable.offImage)
}
else {
buttonToToggle.setChecked(true);
buttonToToggle.setBackground(R.drawable.onImage)
}
}
這樣做的好處是,您只需發送Button的ID即可切換。
或者你可以從所有按鈕發送二進制值,所以你只需要發送幾個字節......在這種情況下,你可以在for循環中為按鈕分配它們的值,就像你創建它們一樣。
希望我幫忙;)
嘗試使用listview添加按鈕。當您從服務器獲取數據時,只需更新listview的適配器即可。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.