我想在 android 中以编程方式隐藏 element/Views

I want to hide element/Views programmatically in android

我得到 JSON 响应,其中包含 hide/show 元素的元素 ID 和标志

使用这个调用函数(来自JSON响应)

 displayView(templateDefinationItem.getTemplateDefinationId(), templateDefinationItem.isActive());

我创建了一个隐藏视图的函数

 public void displayView(final int elementId, boolean isVisible) {
    try {
        View view = findViewById(elementId);
        if (isVisible) {
            view.setVisibility(View.VISIBLE);

        } else {
            view.setVisibility(View.GONE);

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

在上面的代码中,我为操作传递了 elementId 和 true/false 值,其中 elementId of(EditTextId,TextView,LinearLayout,Buttons etc.)

错误

我在这行 View view = findViewById(elementId); 得到 null.

时出错

我想要什么

有什么方法可以绑定任何类型的元素吗?或者任何通用视图?

在我的例子中,我使用这个 View view = findViewById(elementId); 进行绑定,但我得到了 null。

您应该以更方便的显示方法传递视图,而不是传递视图 ID。

首次查看 ID 是自动生成的,因此如果您将此 ID 存储在某些位置并在以后用于获取视图的东西,这不是正确的事情,因为 ID 是生成的并且它因设备而异并且可能会在应用程序关闭时随时更改并且重新开始。

你可以通过 getIdentifier()

try {
     String buttonID = elementId;//String name of id
     int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
     View view = findViewById(resID);
     if (isVisible) {
        view.setVisibility(View.VISIBLE);
     } else {
        view.setVisibility(View.GONE);
    } catch (Exception e) {
        e.printStackTrace();
    }

如上所述,我们通过 i 和 j 值的组合传递视图 ID,然后使用 getIdentifier() 方法创建视图对象。

我上面的代码是针对你的问题的解决方案。

我建议使用 Kotlin 而不是 Java,另外使用 core ktx library(它是 Android 的有用 Kotlin 扩展库)。 有了它,你可以做这样的事情:

view.isVisible = true 将视图设置为 View.VISIBLE,而 view.isVisible = false 将其设置为 View.GONE

同样,您有 view.isInvisible 在不可见和可见之间切换,view.isGone 在消失和可见之间切换。

如果您需要这些方法的文档,可以找到它here

此外,如果您使用的是 Kotlin 而不是 Java,则无需执行 findViewById(R.id.xxx),只需静态导入任何视图即可。