我有应用程序的活动和嵌套Fragment
里面。在活动之上设置新片段不适用onConfiguration更改
添加嵌套Fragment
工作正常,当我被关的活动方向为纵向。
后来我想处理一些事情onConfiguration
改变,所以我从清单中删除屏幕方向,并以编程方式锁定了活动,我overrided onConfiguration
在我的活动变化。
但在这种情况下,我尝试在活动的顶部设置Fragment
。
其onCreateView
的调用,但它不会出现在屏幕上。
我检查了这里描述的解决方案,但它没有奏效。 link
这是我的代码替换片段
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"
/>
活动,这里是的onCreate和onAttach第二次添加片段
@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();
}
}
任何帮助,感谢
你是否在stacktrace上得到任何异常? –
都能跟得上setfragment工作,但是当我想补充另一个片段其布局犯规出现 – Tony
没有代码,不知道这是否是类似于http://stackoverflow.com/questions/30671291/why-does-rotation-cause-android-fragment -replacement-to-fail – mattm