【问题标题】:Navigating between Activities and refreshing Views在活动之间导航并刷新视图
【发布时间】:2015-08-21 16:34:46
【问题描述】:

我有一个活动,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);

一旦用户通过后退或向上按钮从SettingsActivity 导航回MainActivity,我需要做两件事:

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

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

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

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

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

【问题讨论】:

  • 使用 backstack 来查看当前显示谁的帖子很少0, 1,2.. 有些是间接的。我猜你在错误的片段上调用它

标签: android


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多