在情况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){
}
现在的问题是我不知道下一步该怎么做。我到这里为止,但我不知道下一步该怎么做。请帮助我。
答案 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