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

Android 在活动和刷新视图之间导航,android,Android,我有一个活动,main活动,它在七个片段之间交换。片段没有特定的顺序,因此当启动应用程序并首次创建活动时,我将其中一个设置为默认/开始屏幕: FragmentManager fm = getSupportFragmentManager(); Fragment fragment = fm.findFragmentById(R.id.fragmentDrawerContainer); if (fragment == null) { fm.beginTransaction()

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

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);
一旦用户通过“后退”或“向上”按钮从
设置活动
导航回
main活动
,我需要两件事:

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

2)每个片段都包含我编写的自定义视图,在用户从
SettingsActivity
返回后,视图必须使用
SharedReferences
中的值更新自身

为了解决#1,我尝试了使用android:launchMode=“singleTop”,这很有效,但除非切换到另一个片段然后返回,否则无法刷新视图

我尝试在片段的
onResume()
方法中调用
myView.invalidate()
,但似乎不起作用

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

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


}
检查

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

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

使用Backback查看当前正在显示的几个帖子,。。有些是间接的。我猜你用错片段了