Android 在活动顶部设置新片段不会';无法使用onConfiguration更改
我有一个带有活动的应用程序,并在其中嵌套了Android 在活动顶部设置新片段不会';无法使用onConfiguration更改,android,android-fragments,screen-orientation,Android,Android Fragments,Screen Orientation,我有一个带有活动的应用程序,并在其中嵌套了片段 当我将活动方向锁定为纵向时,添加嵌套的片段工作正常。 然后我想处理一些onConfiguration更改的事情,因此我从清单中删除了屏幕方向,并以编程方式锁定了活动,并覆盖了活动中更改的onConfiguration 但在本例中,我尝试在活动顶部设置一个片段 调用了它的onCreateView,但它不显示在屏幕上 我已经检查了这里描述的解决方案,但它不起作用。 这是我用来替换碎片的代码 protected void setFragment
片段
当我将活动方向锁定为纵向时,添加嵌套的片段
工作正常。
然后我想处理一些onConfiguration
更改的事情,因此我从清单中删除了屏幕方向,并以编程方式锁定了活动,并覆盖了活动中更改的onConfiguration
但在本例中,我尝试在活动顶部设置一个片段
调用了它的onCreateView
,但它不显示在屏幕上
我已经检查了这里描述的解决方案,但它不起作用。
这是我用来替换碎片的代码
protected void setFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction;
fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.isAddToBackStackAllowed();
fragmentTransaction.replace(R.id.container, fragment);
// fragmentTransaction.addToBackStack("frag1");
fragmentTransaction.commit();
}
protected void addFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction =
fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.right_in, R.anim.defff, R.anim.defff, R.anim.right_out);
fragmentTransaction.isAddToBackStackAllowed();
fragmentTransaction.add(R.id.container, fragment);
fragmentTransaction.addToBackStack("frag2");
fragmentTransaction.commit();
}
以及onConfiguration的变化
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
RTA.setLocale(getApplicationContext(), RTA.getSharePrefrenceLocale(getApplicationContext()));
//System.out.println("device rotated");getWindowManager().getDefaultDisplay().getRotation();
if (getWindowManager().getDefaultDisplay().getRotation() == Surface.ROTATION_270) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent Madinti = new Intent(this, Madinati.class);
Madinti.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Madinti.putExtra("side", 1);
getApplicationContext().startActivity(Madinti);
} else if (getWindowManager().getDefaultDisplay().getRotation() == Surface.ROTATION_90) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent Madinti = new Intent(this, Madinati.class);
Madinti.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Madinti.putExtra("side", 0);
getApplicationContext().startActivity(Madinti);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
以及清单中的活动
<activity
android:name=".Parking.click_add"
android:configChanges="orientation|keyboardHidden|screenSize|locale"
android:label="@string/title_activity_click_add"
/>
任何帮助谢谢致电setRetainInstance(真);在片段中的OnActivityCreated回调中。stacktrace是否出现任何异常?没有setfragment工作,但当我要添加另一个片段时,如果没有代码,其布局不会出现,不确定这是否类似于你能分享你的代码吗?嘿,谢谢你的帮助,我在onCreate中尝试了这个,我会检查它是否有效谢谢Hanks,伙计,即使我更改了所有的代码结构,它也有效,因为我没有得到答案,但我在旧代码上测试了它,它有效
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (mRetainedChildFragmentManager != null) {
//restore the last retained child fragment manager to the new
//created fragment
try {
Field childFMField = Fragment.class.getDeclaredField("mChildFragmentManager");
childFMField.setAccessible(true);
childFMField.set(this, mRetainedChildFragmentManager);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else {
mRetainedChildFragmentManager = getChildFragmentManager();
}
}