我不是要求解决方案,而是想知道为什么工具栏中的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;
}
答案 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);