在android中编辑动态创建的按钮

时间:2014-02-27 13:24:41

标签: java android service

我正在开发一个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”按钮。每次收到服务器的更新时,都应更新按钮。

怎么可以这样做?

3 个答案:

答案 0 :(得分:1)

如果要更改已创建Button的状态,则在运行时创建它们时,使用View类中的setID(int)方法为它们分配唯一的Id。

所以对于你的button1,你可以,

button1.setId(100);

当你想要改变时,你可以获取按钮的ID并适当地改变它。

if(toChangeButton.getID() == 100){
   //Change button1
}

希望这有帮助。

答案 1 :(得分:1)

我会这样做:

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)
    }
}

这样做的好处是,您只需发送按钮的ID即可切换。

或者你可以从所有按钮发送二进制值,所以你只需要发送几个字节......在这种情况下,你可以在for循环中为按钮分配它们的值,就像你创建它们一样。 / p>

希望我帮忙;)

答案 2 :(得分:0)

尝试使用listview添加按钮。当您从服务器获取数据时,只需更新listview的适配器即可。 希望这可以帮助。