我的应用程序可以从API 22到28正常工作,上面有一个NavigationView,但不适用于API 22,所以我为此版本创建了一个文件夹,用于该版本的其他xml文件,没有NavigationView,因此我文件夹:
res/layout/activity_layout.xml
res/layout-v22/activity_layout.xml
res/layout-v23/activity_layout.xml
我想添加代码以了解我是否正在使用layout-v22 /文件夹,并且不构建NavigationView,我做了类似的事情:
if(Build.VERSION.SDK_INT!=22){
navigationView = (NavigationView) findViewById(R.id.nav_view);
}
但是我看到一个错误,因为找不到R.id.nav_view(无法解析符号'nav_view')。
另一种尝试是检查资源是否存在:
if(getResources().getIdentifier("nav_view","layout",getPackageName())!=0){
navigationView = (NavigationView) findViewById(R.id.nav_view);
}
但是我仍然遇到相同的错误:
如果存在的话,我该如何写条件告诉Android Studio我要使用此资源?
答案 0 :(得分:1)
尝试使用<button (click)="$event.stopPropagation();onButtonClick()">Button</button>
返回的值,这样就不需要访问生成的R文件:
getIdentifier
将第二个参数从“布局”更改为“ id”。
我还可以看到,您正在尝试在if子句之后访问int navViewId = getResources().getIdentifier("nav_view", "id", getPackageName());
if(navViewId != 0){
navigationView = (NavigationView) findViewById(navViewId);
}
,因此下一个问题将是空指针异常,因此也应注意这一点。
答案 1 :(得分:1)
由于某种原因,直到现在我还不能修复它,我发现了一种更简便的方法来检查视图是否存在:
navigationView=findViewById(R.id.nav_view);
if(navigationView!=null){
// do something
}
我在这里找到了此解决方案:https://stackoverflow.com/a/20432875/2966583
已编辑
以前的解决方案是在findViewById
行的Android 5.1设备上使NullPointerException消息崩溃。
我将尝试添加vilpe89答案并以这种方式混合两个答案:
int navViewId = getResources().getIdentifier("nav_view", "id", getPackageName());
if(navViewId != 0){
navigationView = findViewById(R.id.nav_view);
if(navigationView != null){
// do something
}
}
(此答案正在开发中……)