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