恢复 setActionBarTitle 问题时应用程序崩溃
App crashes when resuming setActionBarTitle issue
如果我的应用程序在后台运行了 15 - 20 分钟,每当我恢复它时它就会崩溃。罪魁祸首是我的 Viewfragment 中的这一行 ((MainActivity) getActivity()).setActionBarTitle("Stories");
。
该行在我的 MainActivity
中引用了此内容
public void setActionBarTitle(String title) {
assert getSupportActionBar() != null;
getSupportActionBar().setTitle(title);
}
这是应用程序的外观..
MainActivity->>ViewFragment->> Fragment1 OR Fragment2.
每当我从 Fragment1 中的另一个 Activity 恢复应用程序时,然后按返回键转到 Fragment1,然后再次返回到 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.access0(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)
您应该使用接口在片段和活动之间进行交互(http://developer.android.com/intl/es/training/basics/fragments/communicating.html)。也是一种预防措施,就在 ((MainActivity) getActivity()).setActionBarTitle("Stories");
之前,您应该检查重写是否为 -
if(isVisible()) {
((MainActivity) getActivity()).setActionBarTitle("Stories");
}
在您片段的简历中。
使用界面设置MainActivity的Title eg.
public interface ToolbarListener {
void setTitle(String title);
}
像这样在您的 MainActiviy 中实现它
@Override
public void setTitle(String title) {
if (getSupportActionBar() != null && !TextUtils.isEmpty(title)) {
getSupportActionBar().setTitle(title);
}
}
最后像这样在片段的 OnAttach() 中调用它
@Override
public void onAttach(Activity context) {
super.onAttach(context);
if (context instanceof ToolbarListener) {
((ToolbarListener) context).setTitle("My Title");
}
}
如果我的应用程序在后台运行了 15 - 20 分钟,每当我恢复它时它就会崩溃。罪魁祸首是我的 Viewfragment 中的这一行 ((MainActivity) getActivity()).setActionBarTitle("Stories");
。
该行在我的 MainActivity
中引用了此内容public void setActionBarTitle(String title) {
assert getSupportActionBar() != null;
getSupportActionBar().setTitle(title);
}
这是应用程序的外观..
MainActivity->>ViewFragment->> Fragment1 OR Fragment2.
每当我从 Fragment1 中的另一个 Activity 恢复应用程序时,然后按返回键转到 Fragment1,然后再次返回到 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.access0(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)
您应该使用接口在片段和活动之间进行交互(http://developer.android.com/intl/es/training/basics/fragments/communicating.html)。也是一种预防措施,就在 ((MainActivity) getActivity()).setActionBarTitle("Stories");
之前,您应该检查重写是否为 -
if(isVisible()) {
((MainActivity) getActivity()).setActionBarTitle("Stories");
}
在您片段的简历中。
使用界面设置MainActivity的Title eg.
public interface ToolbarListener {
void setTitle(String title);
}
像这样在您的 MainActiviy 中实现它
@Override
public void setTitle(String title) {
if (getSupportActionBar() != null && !TextUtils.isEmpty(title)) {
getSupportActionBar().setTitle(title);
}
}
最后像这样在片段的 OnAttach() 中调用它
@Override
public void onAttach(Activity context) {
super.onAttach(context);
if (context instanceof ToolbarListener) {
((ToolbarListener) context).setTitle("My Title");
}
}