我具有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和真/假值的操作,其中的elementId(EditTextId,TextView的,LinearLayout中,按钮等)
错误
我在这一行有错误View view = findViewById(elementId);
越来越null
。
我想要的是
是否有任何方式结合的任何类型的元件的?或任何相同的通用的看法?
在我的情况,我用这个View view = findViewById(elementId);
的结合,但我得到空。
而是通过视图id你应该通过视图显示方法更方便。
所以如果事情你存储这个ID的一些在哪里,以后用得到它,因为IDS产生不正确的看法和它不同的设备到设备,当应用程序关闭可能随时改变,并重新开始首先查看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();
}
如上述我们传递视图id与i和j的值的组合,然后使用则getIdentifier()方法,使视图对象。
我的东西上面的代码是对你的问题的解决方案。
在上创建方法:
View view = findViewById(R.id.your_view);
然后在功能:
if(isVisible){
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.GONE);
}
我会建议使用科特林而不是Java,另外使用core ktx library(这是有用的科特林扩展为Android库)。有了它,你可以这样做:
view.isVisible = true
设置为View.VISIBLE
的视图,而view.isVisible = false
将它设置为View.GONE
同样,你有view.isInvisible
非可视化和可视和view.isGone
该走了,可见之间切换之间切换。
如果你需要的这些方法的文档,你可以找到它here。
此外,如果您使用的科特林而不是Java,你不需要做findViewById(R.id.xxx)
,你可以简单地做任何视图的静态导入。