更改片段时TextView不保存值

时间:2015-06-24 17:16:11

标签: android android-fragments

我有一个包含许多片段的活动。在所有片段中,我都会在onViewCreated中获得视图,如下所示:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    tv1 = (TextView)view.findViewById(R.id.tv1);
    tv2 = (TextView)view.findViewById(R.id.tv2);
    tv3 = (TextView)view.findViewById(R.id.tv3);
}

我没有将textview的文本存储在状态中。一个片段扩展ListFragment,我更改适配器的项目并刷新列表视图。

当我回到之前的片段时(我使用popBackStack()因为我需要使用“后退”按钮(应用程序以自助服务终端模式运行),某些片段中的文本会丢失,而在其他片段(和列表视图)中则会发生变化完成了。

我正在使用replace替换帧中的当前片段。

修改

正在丢失的值是TextViews和ImageButtons(图像资源)。 EditText视图中的文本不会丢失。

为什么这只发生在一些片段中?如何解决这种数据丢失?

3 个答案:

答案 0 :(得分:1)

你必须使用

android:freezesText="true"

在您希望保留其文字的布局文字视图中。

我希望它有所帮助。

答案 1 :(得分:0)

让我看看我是否理解你的情况:

  • 您正在显示Fragment1的实例,其中包含您的TextView
  • 您可以使用Fragment1的实例替换屏幕上Fragment2的实例。
  • 您返回Fragment1,但是当您这样做时,TextView中的文字已丢失。

我已经看到发生这种情况的情况,因为包含原始Fragment1的{​​{1}}实例与第二次显示的TextView实例不同。如果您显示Fragment1的两个不同实例,则第二个实例将不会显示第一个实例在其自己的文本视图中包含的文本。

因此,请查看管理片段事务的代码。您是否在显示片段之前创建片段的新实例?如果是这样,您必须保留对要保留的片段的引用,而不是每次都重新创建它们。

另一件需要关注的是如何填充Fragment1。也许实际数据在某处丢失了。

答案 2 :(得分:0)

如果您使用替换E.g。:

,请使用实例变量在每个片段中存储数据
String value = "";
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    tv1 = (TextView)view.findViewById(R.id.tv1);
    tv1.setText(value);

}

注意:每当更新textview数据时,都会更新值变量。