所以我最近将此应用更新为API 21,因此我将所有ActionBar更改为工具栏。 我使用标签将工具栏包含在片段布局中,然后在onResume()方法中进行设置。一切正常,当我启动应用程序时,当我把它放在后台并立即恢复它(或在几分钟内),但如果我在背景中让它稍微,并且可能使用其他应用程序,当我恢复它,我崩溃了。崩溃发生在setupToolbar()方法的第二行,当然因为工具栏对象为null。我的问题是理解为什么这个对象为null,因为当我恢复应用程序时,执行流必须首先执行onCreateView(),然后执行onResume(以及setupToolbar)。因此工具栏必须在布局中充气。
这是我的工具栏布局,包含在fragment_home中:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:layout_width="match_parent" android:layout_height="match_parent"
android:layout_gravity="center">
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:src="@drawable/actionbar_menu"
android:scaleType="center"
android:id="@+id/ivActionbarOpenDrawer"
android:layout_alignParentLeft="true"
android:layout_marginLeft="12dp"
android:padding="5dp"
android:clickable="true"/>
<ImageView
android:layout_width="40dp"
android:layout_height="match_parent"
android:src="@drawable/back_icon"
android:visibility="gone"
android:scaleType="center"
android:id="@+id/ivActionbarBack"
android:layout_alignParentLeft="true"
android:layout_marginLeft="12dp"
android:padding="5dp"
android:clickable="true"/>
<RelativeLayout
android:layout_width="18dp"
android:layout_height="18dp"
android:id="@+id/rlActionbarNotificationNumContainer"
android:background="@drawable/circle_shape_notifies_white"
android:layout_alignParentLeft="true"
android:layout_marginLeft="35dp"
android:layout_marginTop="5dp"
android:gravity="center"
android:layout_gravity="center"
android:visibility="invisible">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tvActionbarNotificationIndicator"
android:layout_gravity="center"
android:gravity="center"
android:layout_marginTop="-2dp"
android:textColor="@color/app_red"
android:textSize="14sp"/>
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:id="@+id/tv_actionBarText"
android:text="home"
android:textAllCaps="true"
android:textColor="@color/white"
android:textSize="18sp"
android:layout_centerInParent="true"
android:visibility="visible"/>
<ImageView
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/search_icon"
android:scaleType="fitEnd"
android:layout_margin="10dp"
android:layout_marginRight="20dp"
android:padding="5dp"
android:layout_alignParentRight="true"
android:id="@+id/ivSearchIconActionbar"/>
<ImageView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/ivActionbarNewMsgMessages"
android:layout_centerVertical="true"
android:background="@drawable/new_message_icon_messages"
android:layout_margin="10dp"
android:visibility="gone"
android:padding="8dp"
android:layout_alignParentRight="true"/>
<ImageView
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/ivActionbarSettingsProfile"
android:layout_centerVertical="true"
android:background="@drawable/icon_settings_profile"
android:layout_margin="10dp"
android:visibility="gone"
android:padding="12dp"
android:layout_alignParentRight="true"/>
</RelativeLayout>
这是setupToolbar方法:
private void setupToolbar() {
Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbarHome);
ImageView ivSearch = (ImageView) toolbar.findViewById(R.id.ivSearchIconActionbar);
ImageView ivMenu = (ImageView) toolbar.findViewById(R.id.ivActionbarOpenDrawer);
ivSearch.setOnClickListener(onSearchClick);
ivMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((MainActivity) getActivity()).openOrCloseDrawer();
}
});
}
编辑:此处为stacktrace
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.twentyLines.app/com.twentyLines.app.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$600(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5454)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.twentyLines.app.controller.HomeController.setupToolbar(HomeController.java:231)
at com.twentyLines.app.controller.HomeController.onActivityCreated(HomeController.java:123)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1794)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:967)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at
android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1917)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:544)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1225)
at android.app.Activity.performStart(Activity.java:5076)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$600(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1331)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5454)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
无法弄清楚,任何帮助都会非常有价值! 提前致谢