getSupportActionBar (панель инструментов) выдает исключение нулевого указателя, используя Butterknife для панели инструментов

Я использую Butterknife для ввода представления панели инструментов. Но метод getSupportActionBar(toolbar) выдает исключение нулевого указателя, и приложение, к сожалению, остановлено. Что можно сделать, чтобы решить эту проблему? Я использую Андроид 4.2. Итак, есть ли проблемы с использованием Butterknife с Jellybean?

Основное действие

    public class MainActivity extends AppCompatActivity {

    @BindView(R.id.tool_bar_demo)
    Toolbar toolbar;
    @BindDrawable(R.drawable.backspace)
    Drawable backspace_btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        setSupportActionBar(toolbar);
        toolbar.setTitle("ABC");
    }
}

активность_основная

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="58dp"
        android:id="@+id/tool_bar_demo"
        android:background="?attr/colorPrimary"
        android:minHeight="?attr/actionBarSize"
        android:titleTextColor="@color/colorAccent"
        />

</RelativeLayout>

уровень

    minSdkVersion 15
    targetSdkVersion 23

    apply plugin: 'com.neenbedankt.android-apt'
    compile 'com.android.support:design:23.4.0'
    compile 'com.jakewharton:butterknife:8.0.1'
    apt 'com.jakewharton:butterknife-compiler:8.0.1'


    classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

person Satan Pandeya    schedule 23.07.2016    source источник
comment
Почему бы просто не найтиViewById для вашей панели инструментов›   -  person Eenvincible    schedule 23.07.2016
comment
Я уверен, что это не связано с Jellybean.   -  person Amir    schedule 23.07.2016
comment
можешь выложить логи?   -  person Amir    schedule 23.07.2016
comment
в android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:130) в example.materialtoolbarexample.MainActivity.onCreate(MainActivity.java:24)   -  person Satan Pandeya    schedule 23.07.2016
comment
@Eenvincible Я использую масляный нож, так что, если есть лучший способ получить панель инструментов.   -  person Satan Pandeya    schedule 23.07.2016
comment
Здравствуйте @SatanPandeya, вы инициализировали панель инструментов. Я полагаю, вы забыли добавить панель инструментов = (Панель инструментов) findViewById (R.id.toolbar_actionbar);   -  person shrestha rohit    schedule 23.07.2016
comment
пожалуйста, поделитесь XML-файлом макета вашей деятельности   -  person Eenvincible    schedule 23.07.2016
comment
@ShresthaRohit В MainActivity: @BindView(R.id.tool_bar_demo) Панель инструментов панели инструментов;   -  person Satan Pandeya    schedule 23.07.2016
comment
@Eenvincible Пожалуйста, найдите файл макета xml в моем вопросе. Activity_main также включен.   -  person Satan Pandeya    schedule 23.07.2016
comment
@Amir java.lang.RuntimeException: невозможно запустить действие ComponentInfo{example.materialtoolbarexample/example.materialtoolbarexample.MainActivity}: java.lang.IllegalStateException: у этого действия уже есть панель действий, предоставленная декором окна. Не запрашивайте Window.FEATURE_SUPPORT_ACTION_BAR и установите для windowActionBar значение false в своей теме, чтобы вместо этого использовать панель инструментов.   -  person Satan Pandeya    schedule 23.07.2016
comment
@SatanPandeya Я думаю, это проблема твоего стиля. вы должны использовать стиль NoActionBar.   -  person Amir    schedule 23.07.2016
comment
‹style name=YOUR_THEME parent=Theme.AppCompat.Light.NoActionBar›   -  person Amir    schedule 23.07.2016
comment
@Amir На этот раз код работает и работает без сбоев, но все равно выдает java.lang.RuntimeException: невозможно запустить действие ComponentInfo{example.materialtoolbarexample/example.materialtoolbarexample.MainActivity}: java.lang.IllegalStateException: у этого действия уже есть панель действий поставляется с оконным декором. Не запрашивайте Window.FEATURE_SUPPORT_ACTION_BAR и установите для windowActionBar значение false в своей теме, чтобы вместо этого использовать панель инструментов. Спасибо за ваш совет и время. Есть ли способ избежать этого?   -  person Satan Pandeya    schedule 23.07.2016
comment
@SatanPandeya Можете ли вы опубликовать свой стиль?   -  person Amir    schedule 23.07.2016
comment
проблема решена?   -  person piotrek1543    schedule 18.08.2016


Ответы (2)


Похоже, это проблема с Butterknife.

Из выпуска собраны основные моменты:

Butter Knife — это просто сахар на findViewById, и это то, что не может найти представление. Как я уже сказал, убедитесь, что макет находится в main_activity или убедитесь, что вы поместили панель инструментов с этим идентификатором в макет main_activity.

другой комментарий говорит: если я установлю идентификатор для включения следующим образом:

<include
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    layout="@layout/toolbar"
    android:id="@+id/include4" />

Это не работает. Но если я уберу android:id="@+id/include4", все сработает. Начиная с версии 7.0.1, добавление идентификатора во включение приводит к тому, что представление не может быть найдено.

Ссылка на выпуск: идентификатор выпуска Butterknife

person Zahan Safallwa    schedule 23.07.2016

На самом деле это не связано с Butterknife или Jellybean. Это обычное исключение, когда вы используете тему ActionBar с Toolbar. И там написано, что вы не можете использовать ActionBar и Toolbar одновременно.

Как я упоминаю в комментарии, вы должны изменить свой стиль на следующий:

<style name="YOUR_STYLE" parent="Theme.AppCompat.Light.NoActionBar">
 .... other attrs here
<item name="windowActionBar">false</item>
</style>

См. эту связанную тему, чтобы решить вашу проблему.

person Amir    schedule 23.07.2016