簡體   English   中英

在android中編輯動態創建的按鈕

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM