【问题标题】:Problems with Android FragmentActivity and TabsAndroid FragmentActivity 和 Tabs 的问题
【发布时间】:2012-04-14 12:22:09
【问题描述】:

我已成功将我的 TabActivity 转换为 FragmentActivity,标签内容为 Fragments。我正在运行两个问题:

  1. 我的每个选项卡都包含 EditText。当我在 TAB1 上更改 EditText 的值,切换到 TAB2,然后再切换回 TAB1 时,EditText 的值已被重置。

  2. 如果从我的一个标签 Fragment 开始一个新的活动,然后返回到现有的 FragmentActivity,那么标签内容就会消失。我最初在使用 TabHost 时遇到了这个问题,这就是为什么我花时间将所有内容都转换为 Fragments...

关于#1,我假设问题与已保存实例状态有关。我完全按照谷歌的example,在我的 FragmentActivity 的 onCreate() 中使用了以下内容:

initialiseTabHost(savedInstanceState);
if (savedInstanceState != null) {
    mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab"));
}

另外,这是我的 FragmentActivity 的 onSaveInstanceState() 方法:

protected void onSaveInstanceState(Bundle outState) {
    outState.putString("tab", mTabHost.getCurrentTabTag());
    super.onSaveInstanceState(outState);
}

这是我的标签片段之一的样子:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    if (container == null) {
        return null;
    }

    return (LinearLayout) inflater.inflate(R.layout.priority_boxes_tab,
            container, false);
}

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setRetainInstance(true);

    ArrayList<Supply> list = new ArrayList<Supply>();

    // More code here

}

我应该做其他事情吗?我在屏幕上有大约 15 个 EditText 字段。我是否需要以某种方式保存所有这些值并进行设置,以便下次使用这些值重新填充这些字段?

关于#2,我不知道我还能做什么。有人有什么建议吗?

谢谢!

【问题讨论】:

    标签: java android tabs fragment


    【解决方案1】:

    我只能回答第一个问题。是的,如果您想恢复它,您必须手动保存每个编辑文本的内容。如果它们不需要在应用程序运行时保留,请将它们保存在 onSaveInstanceState 的捆绑包中,并在 onCreate 和/或 onRestoreInstanceState 中恢复它们。如果您需要持久化这些值,请使用SharedPreferences 或将它们写入另一个文件或数据库。偏好可能是最简单的。

    【讨论】:

    • 我会试试这个,谢谢。使用 TabHost 更容易,它会记住每个选项卡中的值,但现在已弃用,因此不再使用。幸运的是,我在每个选项卡上都有静态数量的 EditText 字段。但是,动态数量的 EditText 字段会变得很困难......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多