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

时间:2016-01-31 09:56:18

标签: android android-fragments android-activity lifecycle

我保存我的片段数据以及我需要以片段形式恢复它们的所有内容" onSaveInstanceState"和活动" onSaveInstanceState"

我没有使用任何xml布局,所有内容都是使用代码创建的。 我可以看到有一个" android:support:fragments"带有FragmentManagerState类型的键" Bundle savedInstanceState"当活动恢复时。

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

这是我的活动

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

和root活动:

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

以下是我添加/替换片段的方法

....
 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(root.getFragmentRootResourceID(), fragment, tag);
    transaction.addToBackStack(tag);
    transaction.commit();
....

我的片段被添加到&#34; FrameLayout&#34;的自定义子类中。 (不保存任何捆绑数据)并且深度为3级

0 个答案:

没有答案