TextView внутри панели инструментов null с помощью Butterknife

Я не прошу решения, но хочу знать, почему TextView внутри Панели инструментов возвращается null? Я использую Butterknife внутри фрагмента.

@BindView(R2.id.toolbarTitle)
    TextView toolbarTitle;

Вот мой макет:

<android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_widget"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorAccent"
                app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
                >

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:gravity="center">

                    <TextView
                        android:id="@+id/toolbarTitle"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:gravity="center"
                        android:textColor="#ffffff"
                        android:textSize="@dimen/text_size18"
                        android:textStyle="bold" />
                </LinearLayout>
            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.AppBarLayout>

Вот мой лог-кот:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference

Хорошо, вот код по запросу:

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_nav_bookmark_trend_my_quote, container, false);
        toolbarTitle.setText(getString(R.string.bookmarks));
        accessToken = AppSharedPreferences.getsharedprefInstance(getContext()).getStringValue(AppSharedPreferences.KEY_USER_TOKEN);
        mUnbinder = ButterKnife.bind(this, view);
        mLinearLayout = new LinearLayoutManager(getActivity());
        mRecyclerView.setLayoutManager(mLinearLayout);


        DrawerLayout drawer = ((EpicSwiperActivity) getActivity()).drawerLayout;
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                getActivity(), drawer, mToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        addRecyclerViewScrollState(mRecyclerView);
        return view;
}

person Debdeep    schedule 11.01.2017    source источник
comment
Почтовый индекс для фрагмента, где вы используете textview   -  person santosh kumar    schedule 11.01.2017
comment
что это значит R2 ???   -  person Satan Pandeya    schedule 11.01.2017
comment
Используйте 1_   -  person Satan Pandeya    schedule 11.01.2017
comment
Пожалуйста, просмотрите документацию Butterknife. @SatanPandeya   -  person Debdeep    schedule 11.01.2017
comment
Хорошо-хорошо. Я использую масляный нож, но никогда не нахожу его раньше. Внутренний LinearLayout кажется ненужным.   -  person Satan Pandeya    schedule 11.01.2017


Ответы (3)


Свяжите свой идентификатор TextView с идентификатором, который вы использовали на @BindView.

И поскольку вы используете фрагмент, убедитесь, что вы проходите в корневом представлении фрагмента вместе с контекстом при вызове ButterKnife.bind(this, rootView);

e.g.

View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);
person Mohammed Junaid    schedule 11.01.2017

Вы правильно установили свой toolbar как ActionBar, иначе сделайте это как:

ToolBar toolbar = (Toolbar) findViewById(R.id.toolbar_widget);
setSupportActionBar(toolbar);
person Chathu_sm    schedule 11.01.2017

Просто попробуй это

Toolbar toolbar = (Toolbar) findViewById(toolbar_widget);
getActivity().setSupportActionBar(toolbar);

TextView tvTitle = (TextView) toolbar.findViewById(R.id.toolbarTitle);
tvTitle.setText(title);

Автор ButterKnife, просто попробуйте это

TextView textView = ButterKnife.findById(toolbar, R.id.toolbarTitle);

{{EDIT}}

toolbar.xml

<android.support.v7.widget.Toolbar
    android:background="?attr/colorAccent"
    android:id="@+id/toolbar_widget"
    android:layout_height="?attr/actionBarSize"
    android:layout_width="match_parent"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <LinearLayout
        android:gravity="center"
        android:layout_gravity="center"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content">

        <TextView
            android:gravity="center"
            android:id="@+id/toolbarTitle"
            android:layout_gravity="center"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textColor="#ffffff"
            android:textSize="@dimen/text_size18"
            android:textStyle="bold" />
    </LinearLayout>
 </android.support.v7.widget.Toolbar>

fragmentlayout.xml

<android.support.design.widget.AppBarLayout
    android:layout_height="wrap_content"
    android:layout_width="match_parent">

    <include
       android:id="@+id/toolbar_widget"
       layout="@layout/toolbar"
       android:layout_width="match_parent"
       android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>

в вашем Java файле

View toolbarView = getLayoutInflater().inflate(R.layout.toolbar,null);
TextView textView = ButterKnife.findById(toolbarView, R.id.toolbarTitle);
person Jaymin Panchal    schedule 11.01.2017
comment
Поскольку мы не можем использовать setSupportActionBar (панель инструментов), я использовал ((AppCompatActivity)getActivity()).setSupportActionBar(toolbar); & ((MyActivity)getActivity()).setSupportActionBar(toolbar);, но это не сработало. - person Debdeep; 11.01.2017
comment
Хорошо, я думал, что вы звоните в свою активность, я ее отредактирую. - person Jaymin Panchal; 11.01.2017
comment
Но это не сработало. Единственное, что сработало, - это без использования Butterknife и ссылки на toolbar.findViewById(R.id.toolbarTitle). - person Debdeep; 11.01.2017
comment
Я отредактировал свой ответ, просто проверьте и попробуйте, надеюсь, он сработает - person Jaymin Panchal; 11.01.2017
comment
Да, я знаю, что это сработает, но не могли бы вы сказать мне, почему нам нужно ссылаться на них отдельно, я имею в виду, почему TextView внутри Toolbar нельзя ссылаться напрямую? Тем не менее, мы сохраняем их в одном корневом расположении. - person Debdeep; 11.01.2017
comment
Также почему мы не можем напрямую использовать @BindView (R2.id.toolbarTitle) TextView toolbarTitle? - person Debdeep; 11.01.2017
comment
вы не можете привязать напрямую, потому что toolbar раздувает свое собственное представление так, что Butterknife разрешает привязку только одного представления - person Jaymin Panchal; 11.01.2017
comment
Да я вижу, что. Спасибо за вашу помощь! - person Debdeep; 11.01.2017
comment
@Debdeep Я обновил свой ответ, чтобы работать с вашим сценарием. Просто попробовать работает или нет? - person Jaymin Panchal; 11.01.2017
comment
Да, уже пробовал. До сих пор думаю, зачем Toolbar раздувать собственный макет :). Спасибо! - person Debdeep; 11.01.2017