Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在活动顶部设置新片段不会';无法使用onConfiguration更改_Android_Android Fragments_Screen Orientation - Fatal编程技术网

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();
    }
}