在活动和刷新视图之间导航

时间:2015-06-06 22:45:44

标签: android

我有一个活动MainActivity,它在七个片段之间交换。片段没有特定的顺序,因此当应用程序启动并首次创建活动时,我将一个设置为默认/开始屏幕:

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentDrawerContainer);

if (fragment == null)
{
    fm.beginTransaction()
            .add(R.id.fragmentDrawerContainer, new DefaultFragment())
            .commit();

    // An int I use to track which Fragment is currently being viewed,
    // for navigation drawer purposes
    mCurrentPosition = DEFAULT_FRAGMENT_POSITION;
}

在导航抽屉中,用户还可以转到新活动SettingsActivity,其中托管PreferenceFragment以更改某些设置,例如度量单位(公制与英制)和颜色主题。

// Standard navigation from one activity to another from inside selectItem() method of nav drawer
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);

一旦用户从MainActivity导航回SettingsActivity,无论是通过后退还是上行按钮,我都需要做两件事:

1)用户最后看到的片段仍然必须存在。目前,活动重新加载DefaultFragment(因为正在重新创建活动,我认为)。

2)每个片段都包含自定义的View I,并且在用户从SharedPreferences返回后,View必须使用SettingsActivity中的值更新自身。

要解决#1,我尝试使用android:launchMode="singleTop",但是我无法刷新视图,除非我切换到另一个片段然后再回来。

我已尝试在片段的myView.invalidate()方法中调用onResume(),但它似乎无法正常工作。

有什么想法吗?如果我不清楚,请告诉我。提前谢谢!

1 个答案:

答案 0 :(得分:0)

1)在MainActivity中使用onSaveInstanceState方法来保存当前片段。 在onCreate方法中恢复它。

public void onCreate(Bundle savedInstanceState) {
    ...
    if (savedInstanceState != null) {
        //Restore the fragment's instance
        mContent = getSupportFragmentManager().getFragment(
                    savedInstanceState, "mContent");
        ...
    }
    ...
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

//Save the fragment's instance
getSupportFragmentManager().putFragment(outState, "mContent", mContent);


}

在片段中,通过覆盖onSaveInstanceState保存实例状态并在onActivityCreated上恢复:

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ...
    if (savedInstanceState != null) {
        //Restore the fragment's state here
    }
}
...
@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

//Save the fragment's state here


}

检查this

2)在您的片段的onResume方法get中,您的共享首选项并将其设置为视图:

SharedPreferences preferences =      this.getActivity().getSharedPreferences("pref", Context.MODE_PRIVATE);
String value = preferences .getString("key", "default_value");