NullPointerException:尝试调用虚方法'void android.support.v7.app.ActionBar

时间:2015-11-17 19:52:56

标签: android android-actionbar android-appcompat appcompat-v7-r23

有很多问题可以解决这个错误。这些的解决方案是:
- 让MainActivity班级延长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);
    ....
}

1 个答案:

答案 0 :(得分:1)

您可能希望尝试将NoActionBar主题应用于清单中的应用程序,并在布局xml文件中使用工具栏而不是Actionbar。

Theme.AppCompat.Light.NoActionBar
  1. 将工具栏添加到布局xml文件
  2. 
    
        <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">
    &#13;
    &#13;
    &#13;

    然后在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));
    }