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

标签 java android service

我正在开发一个 Android 服务器客户端应用程序。 Android 应用程序和服务器之间存在连接。 根据来自服务器的第一条消息,将创建许多按钮并显示在屏幕上。该数字通常在 1 到 10 之间。 我不想在 Activity 中初始化 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 秒发送一次按钮的状态更新。每个按钮代表一盏灯,可以打开或关闭。 “打开”按钮应具有与“关闭”按钮不同的背景。每次收到服务器的更新时,按钮都应该更新。

这怎么能做到呢?

最佳答案

我会这样做:

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 循环中为按钮分配其值,就像创建它们一样。

希望我有帮助;)

关于java - 在android中编辑动态创建的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22069908/

相关文章:

java - 如何忽略内容中的逗号..?

android - 如何防止用户关闭应用程序 - Android 4.0.3

android - 如何在许多 Activity 中保存用户输入?

android - 使用android相对布局时缺少边框线

android - 类和回收器 View 错误 : can't instantiate class

java - 如何使用多线程将List中的数据插入到DB表中以提高性能?

java - 如何将此 XML 文件解析为 MySQL 表?

java - 使用 Spring 时,如何在错误 500 页面中打印堆栈跟踪?

java - 当用户从最近的任务列表中关闭应用程序时,如何保持作业服务运行

linux - 如何设计一个需要通过网络发送数据的守护服务?