Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.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会以编程方式手动恢复片段_Android_Android Fragments_Android Activity_Lifecycle - Fatal编程技术网

当片段添加到自定义视图时,Android会以编程方式手动恢复片段

当片段添加到自定义视图时,Android会以编程方式手动恢复片段,android,android-fragments,android-activity,lifecycle,Android,Android Fragments,Android Activity,Lifecycle,我正在保存片段数据以及在片段“onSaveInstanceState”和活动“onSaveInstanceState”中恢复它们所需的任何内容 我没有使用任何xml布局,所有内容都是用代码创建的。 正如我所看到的,当活动恢复时,“Bundle savedInstanceState”中有一个“android:support:fragments”键,其FragmentManagerState类型为 但我不知道如何用它来恢复历史片段 这是我的活动 public class MainActivity e

我正在保存片段数据以及在片段“onSaveInstanceState”和活动“onSaveInstanceState”中恢复它们所需的任何内容

我没有使用任何xml布局,所有内容都是用代码创建的。 正如我所看到的,当活动恢复时,“Bundle savedInstanceState”中有一个“android:support:fragments”键,其FragmentManagerState类型为

但我不知道如何用它来恢复历史片段

这是我的活动

public class MainActivity extends NemoActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ModelUser.getCurrentUser(getApplicationContext());
    ModelUser.getCurrentUser().Authenticate();

    mRootLayout.setBackgroundColor(ContextCompat.getColor(this, R.color.nemoui_activity_startup_background));

    if (savedInstanceState != null) {
        Log.d("nemo", "saved state");
    } else {
        if (Settings.getInstance().isFirstRun()) {
            ShowWelcomeScreen();
        } else {
            ShowFragment(new MainMenuFragment(), "fullscreen", "main-menu", null);
        }
    }
} ......
和根活动:

public class NemoActivity extends AppCompatActivity {

protected FrameLayout   mRootLayout;
protected HashMap<String, FragmentPlaceholder> mPlaceholderTagMap = new HashMap<>();
protected HashMap<String, FragmentPlaceholder> mFragmentTagMap = new HashMap<>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mRootLayout = new FrameLayout(this);
    mRootLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    setContentView(mRootLayout);
}

我的片段被添加到“FrameLayout”(不保存任何捆绑数据)的自定义子类中,深度为3级

请查看
FragmentManager
API的方法
addToBackStack()
,我已经在向backstack添加片段,但当我旋转deviceMybad,
addToBackStack()
位于
FragmentTransaction
中,而不是
FragmentManager
。您需要使用
FragmentManager
api从后堆栈中弹出它
....
 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(root.getFragmentRootResourceID(), fragment, tag);
    transaction.addToBackStack(tag);
    transaction.commit();
....