Android 应用程序在恢复setActionBarTitle问题时崩溃

Android 应用程序在恢复setActionBarTitle问题时崩溃,android,fragment,toolbar,resume,Android,Fragment,Toolbar,Resume,如果我的应用程序在后台运行了15-20分钟,每当我恢复它时,它就会崩溃。罪魁祸首是这一行((MainActivity)getActivity())。setActionBarTitle(“故事”)在我的Viewfragment中 这一行在我的主要活动中引用了这一点 public void setActionBarTitle(String title) { assert getSupportActionBar() != null; getSupportActionBa

如果我的应用程序在后台运行了15-20分钟,每当我恢复它时,它就会崩溃。罪魁祸首是这一行
((MainActivity)getActivity())。setActionBarTitle(“故事”)在我的Viewfragment中

这一行在我的主要活动中引用了这一点

public void setActionBarTitle(String title) {
        assert getSupportActionBar() != null;
        getSupportActionBar().setTitle(title);
    }
下面是应用程序的外观

MainActivity->>ViewFragment->>Fragment1或Fragment2

每当我从Fragment1中的另一个活动恢复应用程序时,按back键转到Fragment1,然后再按back键回到ViewFragment,它就会崩溃,指向上一行。日志如下:

我最好的猜测是MainActivity早就停止了,因此无法启动…我如何解决这个问题

java.lang.RuntimeException: 
Unable to start activity ComponentInfo{com.reelforge.utility/com.reelforge.utility.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
 at android.app.ActivityThread.access$800(ActivityThread.java:135)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
 at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
 at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.reelforge.utility.MainActivity.setActionBarTitle(MainActivity.java:155)
 at com.reelforge.utility.Viewfragment.ViewFragment.onCreate(ViewFragment.java:32)
at android.support.v4.app.Fragment.performCreate(Fragment.java:1939)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1029)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
 at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1230)
at android.support.v4.app.FragmentManagerImpl.dispatchCreate(FragmentManager.java:2037)
at android.support.v4.app.FragmentController.dispatchCreate(FragmentController.java:154)
 at android.support.v4.app.FragmentActivity.onCreate(FragmentActivity.java:289)
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:61)
 at br.liveo.navigationliveo.NavigationLiveo.onCreate(NavigationLiveo.java:112)
at android.app.Activity.performCreate(Activity.java:5231)

您应该使用接口在片段和活动()之间进行交互。还有一个预防措施,就在
((MainActivity)getActivity()).setActionBarTitle(“故事”)之前您应该检查重写是否为-

if(isVisible()) {
((MainActivity) getActivity()).setActionBarTitle("Stories");
}

在片段的简历中。

使用界面设置主要活动的标题,例如

public interface ToolbarListener {
    void setTitle(String title);
}
像这样在你的日常活动中实施

@Override
public void setTitle(String title) {
    if (getSupportActionBar() != null && !TextUtils.isEmpty(title)) {
        getSupportActionBar().setTitle(title);
    }
}
@Override
public void onAttach(Activity context) {
    super.onAttach(context);
    if (context instanceof ToolbarListener) {
        ((ToolbarListener) context).setTitle("My Title");
    }
}
最后像这样在片段的OnAttach()中调用它

@Override
public void setTitle(String title) {
    if (getSupportActionBar() != null && !TextUtils.isEmpty(title)) {
        getSupportActionBar().setTitle(title);
    }
}
@Override
public void onAttach(Activity context) {
    super.onAttach(context);
    if (context instanceof ToolbarListener) {
        ((ToolbarListener) context).setTitle("My Title");
    }
}

仍然不工作。。这条线是什么意思?if(上下文实例of ToolbarListener)if(上下文实例of ToolbarListener)检查上下文是否是我们创建的接口的实例。谢谢…工作得很好