NullPointerException:尝试调用虚方法 'void android.support.v7.app.ActionBar
NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar
有许多问题处理此错误。这些问题的解决方案是:
- 让 MainActivity
class 扩展 AppCompatActivity
- 调用 getSupportActionBar()
,而不是 getActionBar()
我已经在做这些了。
我发现 appcompat-v7 22.1.1 和 appcompat-v7 23.1.1 有所不同。
我在 23 中收到错误。在 22 中它工作正常。
单步执行调试器中的代码,我在 AppCompatDelegateImplV7.intWindowDecorActionBar()
中看到,
mHasActionBar为false,导致mActionBar没有被实例化
单步执行 22.1.1 中的代码,代码略有不同,但最终,我看到 mHasActionBar 为真,因此代码有效。
我该如何处理?
import android.support.v7.app.ActionBar;
...
public class MainActivity extends AppCompatActivity implements ...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer);
....
}
您可能想尝试将 NoActionBar 主题应用到清单中的应用程序,并在布局 xml 文件中使用工具栏而不是操作栏。
Theme.AppCompat.Light.NoActionBar
- 将工具栏添加到布局 xml 文件
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_player"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
style="@style/Topeka.TextAppearance.Title"
android:background="@color/topeka_primary"
android:elevation="@dimen/elevation_header">
然后在Java代码中,将其设置为Actionbar
private void setUpToolbar(Player player) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_player);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
((TextView) toolbar.findViewById(R.id.title)).setText(getDisplayName(player));
}
有许多问题处理此错误。这些问题的解决方案是:
- 让 MainActivity
class 扩展 AppCompatActivity
- 调用 getSupportActionBar()
,而不是 getActionBar()
我已经在做这些了。
我发现 appcompat-v7 22.1.1 和 appcompat-v7 23.1.1 有所不同。 我在 23 中收到错误。在 22 中它工作正常。
单步执行调试器中的代码,我在 AppCompatDelegateImplV7.intWindowDecorActionBar()
中看到,
mHasActionBar为false,导致mActionBar没有被实例化
单步执行 22.1.1 中的代码,代码略有不同,但最终,我看到 mHasActionBar 为真,因此代码有效。
我该如何处理?
import android.support.v7.app.ActionBar;
...
public class MainActivity extends AppCompatActivity implements ...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_drawer);
....
}
您可能想尝试将 NoActionBar 主题应用到清单中的应用程序,并在布局 xml 文件中使用工具栏而不是操作栏。
Theme.AppCompat.Light.NoActionBar
- 将工具栏添加到布局 xml 文件
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar_player"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
style="@style/Topeka.TextAppearance.Title"
android:background="@color/topeka_primary"
android:elevation="@dimen/elevation_header">
然后在Java代码中,将其设置为Actionbar
private void setUpToolbar(Player player) {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_player);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
((TextView) toolbar.findViewById(R.id.title)).setText(getDisplayName(player));
}