从后台恢复时工具栏为null

时间:2014-12-09 23:02:12

标签: android background-process toolbar

所以我最近将此应用更新为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)

无法弄清楚,任何帮助都会非常有价值! 提前致谢

0 个答案:

没有答案