工具栏内的TextView null与Butterknife

时间:2017-01-11 10:33:18

标签: android android-toolbar 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>

这是我的logcat:

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;
}

3 个答案:

答案 0 :(得分:0)

试试这个

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);

答案 1 :(得分:0)

您是否已将toolbar正确设置为ActionBar,否则请将其设置为:

ToolBar toolbar = (Toolbar) findViewById(R.id.toolbar_widget);
setSupportActionBar(toolbar);

答案 2 :(得分:0)

将您的TextView ID与您在@BindView上使用的ID交叉引用。

由于您正在使用片段,因此请确保在调用ButterKnife.bind(this, rootView);时传递片段的根视图以及上下文

e.g。

View view = inflater.inflate(R.layout.fancy_fragment, container, false);
    ButterKnife.bind(this, view);