在我的应用程序中,我有一个工具栏,在我的MainActivity中工作得很好。
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toolbar"
android:background="@color/colorPrimary"
android:minHeight="?attr/actionBarSize"
app:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/toolbar_item_counter"
android:id="@+id/toolbar_tv_itemCounter"
android:textSize="18dp"
android:textColor="#ffffff"
android:textStyle="bold"/>
</RelativeLayout>
但是当我尝试给这个菜单充气时
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/item_accept"
android:title="Accept"
android:icon="@drawable/ic_action_accept"
app:showAsAction="always"/>
</menu>
使用此代码
public class AddActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.inflateMenu(R.menu.menu_input_accept);
TextView toolbartext = (TextView) findViewById(R.id.toolbar_tv_itemCounter);
toolbartext.setVisibility(View.INVISIBLE);
}
}
它给了我这个
引起:java.lang.NullPointerException:尝试调用虚方法&#39; void android.support.v7.widget.Toolbar.inflateMenu(int)&#39;在空对象引用上
我不明白的致命错误。我还尝试覆盖onCreateOptionsMenu方法并像我在MainActivity中一样使用MenuInflater,但它没有任何改变。我在xml中包含了我的工具栏,就像我在主要活动中所做的那样:
<include layout="@layout/toolbar_layout"
android:id="@+id/include" />
答案 0 :(得分:1)
我将我的工具栏包含在xml中,就像我在主要活动中所做的那样:
<include layout="@layout/toolbar_layout" android:id="@+id/include" />
当你包含一个布局时,如果你为include标签提供一个id(就像你使用 android:id =“@ + id / include”那样)那么包含一个layout将具有该id,覆盖已包含布局内已分配的任何id。因此,在您的情况下,工具栏的ID为 R.id.include ,而不是R.id.toolbar。
删除 android:id =“@ + id / include”,将其更改为 android:id =“@ + id / toolbar”或查找工具栏使用 findViewById(R.id.include)。