如果我设置应用程序背景,我认为这是由于内存不足造成的。
日志如下:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.qingdaonews.bus/com.qingdaonews.activity.RealTime}:
java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.view.View$BaseSavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/myviewpager. Make sure other views do not use the same id.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2266)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2316)
at android.app.ActivityThread.access$600(ActivityThread.java:150)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1298)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:213)
at android.app.ActivityThread.main(ActivityThread.java:5225)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:741)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
看起来像是由于视图的相同 id。事实上,id 'myviewpager' 仅在 xml 文件中出现一次,并且仅当应用程序从后台重新打开时才会出现问题。
我的 MainActivity 有一个可以在其中替换的片段。我使用getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).commit();
当我开始活动时。
没有“savedInstanceState”的超级方法,我没有使用其他方法。
原因是您的片段被重新添加。
你的代码看起来像这样:
protected void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
///...
getSupportFragmentManager().beginTransaction()
.replace(R.id.content_frame, fragment).commit();
}
关联的 FragmentManager 会在以下情况下恢复:savedInstanceState != null
通过致电super(savedInstanceState)
,并且所有提交的片段也会被恢复。相反,检查您的片段是否已添加,然后添加它only if not:
public class MyActivity extends Activity{
private MyFragment myFragment;//extends Fragment
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//your stuff
FragmentManager fm = getFragmentManager();
myFragment = (MyFragment) fm.findFragmentByTag(MyFragment.TAG);
if(myFragment == null){
myFragment = new MyFragment();
fm.beginTransaction()
.add(R.id.content_frame, myFragment, MyFragment.TAG)
.commit();
}
//other stuff
}
}
而在你的MyFragment
,标签是:public static final String TAG = MyFragment.class.getSimpleName();
对于我来说,我发现使用提供的 TAG 参数添加片段是一个很好的做法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)