在onCreate()
活动方法中,我有ToolBar
的代码:
toolbar = (Toolbar) findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我的IDE让我感到温暖,getSupportActionBar().setDisplayHomeAsUpEnabled(true);
可能会产生 NullPointerException
。
我的问题是我应该忽略它,我怎么能解决它?
答案 0 :(得分:5)
IDE会警告您有可能NullPointerException
,因为在很多情况下应用可以抛出一个。{对于示例,您可以为整个Application
使用 NoActionBar 主题(或仅针对相关activity
),但您仍尝试检索对该getActionBar()
的引用使用getSupportActionBar()
(或toolbar = (Toolbar) findViewById(R.id.tool_bar);
if (toolbar != null) {
// you can safely invoke methods on the Toolbar
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
} else {
// Toolbar is null, handle it
}
)的操作栏。
请忽略警告,但请记住上面的注释。
<强>更新强>
您可以通过明确检查可为空性来消除警告:
imhist()
答案 1 :(得分:2)
您可以检查null,但如果它没有崩溃,则不应该是nessessary:
if(getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
答案 2 :(得分:2)
这两个答案都是正确的,但如果您只想删除警告
ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
断言actionBar!= null ,表示ActionBar不为null,因此调用此变量的任何方法都不会产生NullPointerException警告。
我想如果你
它会起作用assert getSupportActionBar() != null
但我不确定。
答案 3 :(得分:1)
如果工具栏在包含布局,我们需要使用包含标签的id,而不是工具栏标签。
<include
android:id="@+id/toolbar_include"/>
<!--/**toolbar_include.xml*/-->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"/>
就是用
Toolbar toolbar=findViewById(R.id.toolbar_include);
答案 4 :(得分:0)
首先给出了从NullPointerException中转义的答案,并在将其放入代码后: -
if(getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
此后只解决异常问题,您也不会将工具栏设为空。 我想说的只是检查你的活动xml你已经宣布了你的工具栏,我想这会重新解决你的问题。
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar1"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
只需将工具栏放入您的活动Xml中。