Панель инструментов выдает фатальную ошибку в меню надувания в Intent/AppCompatActivity

В моем приложении есть панель инструментов, которая отлично работает в моей 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: попытка вызвать виртуальный метод 'void android.support.v7.widget.Toolbar.inflateMenu(int)' для ссылки на пустой объект

фатальная ошибка, которую я не понимаю. Я также попытался перезаписать метод onCreateOptionsMenu и использовать там MenuInflater, как в своей MainActivity, но он ничего не меняет. Я включил свою панель инструментов в xml, как сделал в своей основной деятельности:

<include layout="@layout/toolbar_layout" android:id="@+id/include" />

1 ответ

Решение

Я включил свою панель инструментов в xml, как сделал в своей основной деятельности:

   <include layout="@layout/toolbar_layout"
    android:id="@+id/include" />

Когда вы включаете макет, если вы предоставляете идентификатор для тега включения (как вы сделали, используя android: id = "@ + id / include"), тогда корень включенного макета будет иметь этот идентификатор, переопределяя любой идентификатор уже назначен внутри включенного макета. Так что в вашем случае панель инструментов имеет идентификатор R.id.include, а не R.id.toolbar.

Либо удалите android: id = "@ + id / include", измените его на android:id="@+id/toolbar" или найдите панель инструментов, используя findViewById (R.id.include).

Другие вопросы по тегам