如何一次禁用多个给定按钮

时间:2018-11-17 13:40:19

标签: java android

在情况1中,我必须禁用7个按钮,在情况2中,我必须禁用3个按钮。我试图使单个功能在两种情况下都禁用按钮。在这两种情况下,我都会传递一个包含IDs个按钮的数组,这些按钮将被禁用。 示例:-

Case:1
String [ ] arrayString = {"btn1", "btn2", "btn3", "btn4", "btn5", "btn6", "btn7"};

Case:2
String [ ] arrayString = {"btn1", "btn2", "btn3"};

功能:-

private void disable buttons(String[ ] buttons){

}

现在的问题是我不知道下一步该怎么做。我到这里为止,但我不知道下一步该怎么做。请帮助我。

2 个答案:

答案 0 :(得分:3)

您可以通过View的“名称”获取其ID:

public void disableButtons(String[] buttonNames) {
    for (String name : buttonNames) {
        int id = getResources().getIdentifier(name, "id", getPackageName());
        Button button = (Button) findViewById(id);
        button.setEnabled(false);
    }
}

如果该代码不会在活动中使用,那么您将必须提供一个有效的上下文,如下所示:

int id = context.getResources().getIdentifier(name, "id", context.getPackageName());


因此您可以致电:

disableButtons(arrayString);

答案 1 :(得分:1)

如果您知道要一次启用/禁用多个按钮,可以将它们存储在列表中,然后简单地进行迭代

lateinit var buttons: List<Button>
onCreate(...) {
    //after the layout is inflated add all buttons to the list
    buttons = listOf(button1, button2, button3)
}
...
buttons.forEach { it.enabled = false }

作为替代,您可以通过递归浏览显示列表层次结构来访问屏幕上的所有按钮。首先,我们需要这两个kotlin扩展:

var View.enabledRecursive
        get() = isEnabled
        set(value) {
            isEnabled = value
            if (this !is ViewGroup) return
            children.forEach { it.isEnabledRecursive = value }
        }

val ViewGroup.children
    get() = (0 until childCount).map { getChildAt(it) }

然后只需在父版式或包含所有按钮的某个容器中调用它

parentLayout.enabledRecursive = true