为何setSupportActionBar()无法识别Toolbar?程序运行崩溃求助
为什么调用setSupportActionBar后我的应用崩溃了?
嘿,问题出在你手动创建的那个空的setSupportActionBar()方法上!
正常来说,setSupportActionBar()是AppCompatActivity(AndroidX里的兼容类)已经帮你实现好的方法,作用是把你自定义的Toolbar绑定成Activity的ActionBar。但你自己写了一个同名的空方法,这就把父类的实现给覆盖了——当你调用setSupportActionBar(mainToolbar)时,执行的是你这个啥也没做的空方法,根本没完成Toolbar的初始化。
接下来的事情就顺理成章了:getSupportActionBar()会返回null,你接着调用null.setTitle("Some Title"),直接触发空指针异常(NullPointerException),应用自然就崩溃了。
怎么修复?
- 删掉你自己写的空方法:把这段代码彻底移除
private void setSupportActionBar(Toolbar mainToolbar) {} - 确保你的Activity继承对了类:你的MainActivity必须继承
AppCompatActivity,而不是普通的Activity,否则根本没有setSupportActionBar()这个方法(这也是IDE一开始让你创建方法的原因)。类定义应该是这样:public class MainActivity extends AppCompatActivity { // 你的代码逻辑 } - 检查AppCompat依赖:确认你的Module级
build.gradle里引入了AndroidX的AppCompat库,比如:
版本号可以根据当前最新版本调整。implementation 'androidx.appcompat:appcompat:1.6.1'
修改后的示例代码
调整后的onCreate方法可以加上非空判断更稳妥:
private Toolbar mainToolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mainToolbar = findViewById(R.id.main_toolbar); // AndroidX无需强转 setSupportActionBar(mainToolbar); // 加个非空判断,避免意外情况 if (getSupportActionBar() != null) { getSupportActionBar().setTitle("Some Title"); } }
这样修改后,setSupportActionBar()会调用父类的正确实现,Toolbar就能正常作为ActionBar工作,不会再崩溃啦。
内容的提问来源于stack exchange,提问作者hellenism
相关产品推荐
相关产品推荐

