Android FragmentActivity 和 Tabs 的问题

Posted

技术标签:

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

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

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

    如果从我的一个标签 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,我不知道我还能做什么。有人有什么建议吗?

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

我会试试这个,谢谢。使用 TabHost 更容易,它会记住每个选项卡中的值,但现在已弃用,因此不再使用。幸运的是,我在每个选项卡上都有静态数量的 EditText 字段。但是,动态数量的 EditText 字段会变得很困难......

以上是关于Android FragmentActivity 和 Tabs 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Android 关于Toolbar和FragmentActivity的问题

将参数从 Android FragmentActivity 传递给 Fragment

Android Studio 无法解析 fragmentActivity 和 ViewPager 导入

android FragmentActivity 不响应 onKeyDown事件

Android FragmentActivity 和 Tabs 的问题

在 Android 上使用 FragmentActivity.getIntent().getExtras() 时出现 NullPointerException