我想以编程方式在android

时间:2019-02-05 09:14:13

标签: android android-layout android-view android-design-library

我得到了带有elementId和用于隐藏/显示该元素的标志的JSON响应

使用此函数(来自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((EditTextId,TextView,LinearLayout,Buttons等)

错误

我在此行View view = findViewById(elementId);得到null时出错。

我想要的

是否可以绑定任何类型的元素?还是任何相同的通用视图?

在我的情况下,我使用此View view = findViewById(elementId);进行绑定,但我为空。

3 个答案:

答案 0 :(得分:1)

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

First Views ID是自动生成的,因此,如果您将这些ID存储在某些地方,后来又用来获取视图,那是不对的,因为Ids是生成的,并且设备与设备不同,并且在应用程序关闭并重新启动时可能随时更改

您可以通过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()方法制作Views对象。

我上面的代码是解决您的问题的方法。

答案 1 :(得分:0)

关于on create方法:

View view = findViewById(R.id.your_view);

然后在函数中

if(isVisible){
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.GONE);
}

答案 2 :(得分:0)

我建议使用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),只需对任何View进行静态导入即可。