我得到了带有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);
进行绑定,但我为空。
答案 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进行静态导入即可。