我正在开发一个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”按钮。每次收到服务器的更新时,都应更新按钮。
怎么可以这样做?
答案 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的适配器即可。 希望这可以帮助。