安卓View.getId()获取的R.id.XX在case中报错
时间: 2024-03-18 20:40:03 浏览: 224
如果你在 `switch-case` 语句中使用 `View.getId()` 获取 `R.id.XX` 报错,可能是因为 `switch-case` 语句中的 `case` 表达式必须是一个常量表达式,而 `View.getId()` 方法返回的不是常量。
为了解决这个问题,你可以将 `View.getId()` 获取到的值转换为一个常量,例如使用 `final` 或 `static final` 修饰。例如:
```
final int viewId = view.getId();
switch (viewId) {
case R.id.button1:
// do something
break;
case R.id.button2:
// do something
break;
// other cases
}
```
这样,你就可以在 `switch-case` 语句中使用 `viewId` 常量来匹配对应的 `id`。
相关问题
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_toolbar, menu); View view = menu.findItem(R.id.action_share).getActionView(); // 注册上下文菜单 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 定义点击事件处理程序 switch (v.getId()) { case R.id.action_share: allShare(c,url); break; } } }); return true; } 报错:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setOnClickListener(android.view.View$OnClickListener)' on a null object
这个错误的原因是 `menu.findItem(R.id.action_share).getActionView()` 返回了 `null`,导致在调用 `setOnClickListener` 方法时发生了空指针异常。你需要检查一下 `menu_toolbar.xml` 文件中的 `action_share` 菜单项是否正确定义,并且在代码中正确引用了该菜单项的 ID。另外,你还需要确保在调用 `getActionView` 方法之前,该菜单项已经被创建出来了。你可以在 `onCreateOptionsMenu` 方法中使用 `Log` 来输出一些调试信息,以便更好地定位问题所在。
@Override public void onClick(View view){ switch (view.getId()){ case R.id.frag_record_bz: ShowBZ(); break; case R.id.frag_record_time: showTime(); break; } }
这段代码是一个 Android 中的点击事件处理方法。当用户点击某个 View(例如一个按钮)时,系统会调用该方法。
在该方法中,使用了一个 switch 语句来判断用户点击的是哪个 View,然后分别调用了 ShowBZ() 和 showTime() 方法。这些方法的实现需要根据具体的需求来编写。
阅读全文