Android开发报错:需ActionBar却返回void及API限制问题求助
解决你的ActionBar代码报错与API限制问题
首先搞定第一个编译错误:Required: android.support.v7.app.ActionBar Found: void
你写的代码ActionBar toolbar = getSupportActionBar().setDefaultDisplayHomeAsUpEnabled(true);犯了个小逻辑错误——setDefaultDisplayHomeAsUpEnabled(true)这个方法的返回值是void(没有返回内容),根本没法赋值给ActionBar类型的变量。正确的写法是先拿到ActionBar实例,再调用这个方法,同时建议加个非空判断避免空指针异常:
ActionBar toolbar = getSupportActionBar(); if (toolbar != null) { toolbar.setDefaultDisplayHomeAsUpEnabled(true); }
接下来处理第二个API限制的提示:ActionBar.setDefaultDisplayHomeAsUpEnabled只能从同一库组(groupId=com.android.support)内调用
这个提示大多和项目的依赖配置、库版本兼容有关,你可以试试这几个方案:
- 检查依赖库一致性:打开项目Module级别的
build.gradle文件,确保所有support相关的依赖都属于同一groupId——如果用的是旧版support库,所有依赖都得是com.android.support开头;如果已经迁移到AndroidX,所有依赖都要换成androidx.appcompat这类androidx开头的,绝对不能混用两类库。 - 确认导入包正确:如果用的是AndroidX,一定要确保导入的是
androidx.appcompat.app.ActionBar,而不是旧的android.support.v7.app.ActionBar,两者不能共存。 - 抑制Lint警告:要是你确认自己的调用逻辑没问题(比如是在
AppCompatActivity里调用getSupportActionBar()),可以给包含这段代码的方法加个@SuppressLint("RestrictedApi")注解,直接消除这个提示:
@SuppressLint("RestrictedApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); // 你的ActionBar代码 ActionBar toolbar = getSupportActionBar(); if (toolbar != null) { toolbar.setDefaultDisplayHomeAsUpEnabled(true); } }
内容的提问来源于stack exchange,提问作者Farhad Ba-ali
相关产品推荐
相关产品推荐

