背投广告典型网站,什么网站可以做设计,虚拟机中做网站,wordpress 增加背景在默认情况下当发生横竖屏切换时#xff0c;当前Activity中的fragment都会通过Fragment.instantiate重新生成#xff0c;该方法将使用默认的构造函数来生成相应的Fragment#xff0c;所以如果没有默认构造函数的话将会报错#xff0c;例如#xff1a;class MyFragment {
p…在默认情况下当发生横竖屏切换时当前Activity中的fragment都会通过Fragment.instantiate重新生成该方法将使用默认的构造函数来生成相应的Fragment所以如果没有默认构造函数的话将会报错例如 class MyFragment {
public MyFragment(int title, String message){}
public static final MyFragment newInstance(int title, String message)
{MyFragment f new MyFragment (int title, String message);return f;
}
} 这时候当横竖屏切换时由于MyFragment没有默认构造函数将抛出java.lang.InstantiationException异常正确的方式为使用Bundle来进行参数传递修改如下 class MyFragment {
private static final String TITLEtitle,MESSAGEmessage;
private String title,message;
public void onCreate(Bundle saveInstanceState){title getArguments().getString(TITLE);message getArguments().getString(MESSAGE);
}
public static final MyFragment newInstance(int title, String message)
{MyFragment f new MyFragment (int title, String message);Bundle bdl new Bundle(2);bdl.setString(TITLE,title);bdl.setString(MESSAGE,message);f.setArguments(bdl);return f;
}
} 通过这种方式创建的Fragment在横竖屏切换时通过getArguments依然能够获得之前设置的数据其原理是在FragmentActivity切换时会调用onRetainNonConfigurationInstance方法将FragmentManager中管理的所有Fragment及其状态数据其中就包括了这个设置的Bundle保存在一个FragmentActivity.NonConfigurationInstances对象实例中这样在新的FragmentActivity启动时在onCreate方法中可以使用Activity.getLastNonConfigurationInstance()方法来获取这个对象然后通过FragmentManager.restoreAllState方法还原所有Fragment及其状态,需要注意的是在这种情况下可能会出现之前的Fragment没有detach而处于活动状态导致该Fragment的视图生成可能会造成两个Fragment视图重叠的情况在官方的Support.v4的例子中FragmentTabs.TabManager.addTab里有一段检查Fragment是否detach的代码正是用于解决这个问题。通过上面的处理基本是没问题了但因为默认情况下横竖屏切换后整个FragmentActivity会被销毁并重建所有Fragment中的成员变量也会丢失但所有的Fragment状态数据如上所述会被保留并还原这个时候所有的视图都会重新创建。解决方法一在相应的Activity配置中加上android:configChangesorientation|keyboardHidden设置这样切换时就不会销毁FragmentActivity,所有的Fragment的状态及视图也就会保持。解决方法二在使用FragmentTransaction.add()方法添加fragment时设置第三个tag参数,随后在还原时可通过FragmentManager.findFragmentByTag()方法找回还原的fragment. 转载于:https://www.cnblogs.com/wjhblogs/p/4688921.html