在片段中引用工具栏时出现 NullPointerException
NullPointerException when referencing toolbar in fragment
我在我的 activity 中添加了一个工具栏,并试图在我的片段中访问它以更改后退导航的标题和图标,但是我一直收到错误消息
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
当我 运行 我的应用程序以及一些关于可能 object 为空的警告时。我知道这与 getsupportactionbar
有关
但是我不知道我做错了什么
这是在activity
中声明工具栏的代码
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
fragment中toolbar的引用和修改代码
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
以及在xml
中声明工具栏的代码
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorAccent"
android:layout_alignParentTop="true"
app:popupTheme="@style/AppTheme.PopupOverlay" />
如果有帮助,我正在使用 appcompatactivity
((Activity)getActivity()).setSupportActionBar(工具栏);
修改这个:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
对此:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setDisplayShowHomeEnabled(true);
getActivity().setSupportActionBar(toolbar);
希望对您有所帮助!!!
我认为问题在于您在视图 inflation 之前访问了工具栏,这导致了 NullPointerException
。而且由于您使用的是支持库,因此您需要将工具栏转换为 android.support.v7.widget.Toolbar
。这是一个可能有帮助的解决方案:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) rootView.findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
return rootView;
}
我在我的 activity 中添加了一个工具栏,并试图在我的片段中访问它以更改后退导航的标题和图标,但是我一直收到错误消息
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
当我 运行 我的应用程序以及一些关于可能 object 为空的警告时。我知道这与 getsupportactionbar
有关
但是我不知道我做错了什么
这是在activity
中声明工具栏的代码Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
fragment中toolbar的引用和修改代码
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
以及在xml
中声明工具栏的代码<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorAccent"
android:layout_alignParentTop="true"
app:popupTheme="@style/AppTheme.PopupOverlay" />
如果有帮助,我正在使用 appcompatactivity
((Activity)getActivity()).setSupportActionBar(工具栏);
修改这个:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
对此:
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setDisplayShowHomeEnabled(true);
getActivity().setSupportActionBar(toolbar);
希望对您有所帮助!!!
我认为问题在于您在视图 inflation 之前访问了工具栏,这导致了 NullPointerException
。而且由于您使用的是支持库,因此您需要将工具栏转换为 android.support.v7.widget.Toolbar
。这是一个可能有帮助的解决方案:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
android.support.v7.widget.Toolbar toolbar = (android.support.v7.widget.Toolbar) rootView.findViewById(R.id.toolbar);
((AppCompatActivity)getActivity()).setSupportActionBar(toolbar);
((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
return rootView;
}