【问题标题】:TextViews not saving values when changing fragments更改片段时TextViews不保存值
【发布时间】:2015-06-24 17:16:11
【问题描述】:

我有一个包含许多片段的活动。在所有片段中,我得到了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 视图中的文本不会丢失。

为什么只在一些片段中发生这种情况,我该如何解决这种数据丢失问题?

【问题讨论】:

  • 您是在交易中使用替换还是添加?
  • @PedroOliveira 我正在使用替换。

标签: android android-fragments


【解决方案1】:

你必须使用

android:freezesText="true"

在您想要保留其文本的布局文本视图中。

希望对你有帮助。

【讨论】:

  • 你拯救了我的一天!!
  • 我很高兴知道我的回答对您有所帮助,@marcosE。通过了解到我帮助了你,我有一种很好的感觉,即回馈社区一点点我从中获得的巨大知识!谢谢你让我知道。 :)
  • 完美解决方案!我找了这个至少一个小时。非常感谢!
【解决方案2】:

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

  • 您正在显示一个 Fragment1 的实例,其中包含您的 TextView。
  • 您将屏幕上的Fragment1 实例替换为Fragment2 实例。
  • 您返回到Fragment1,但是当您这样做时,TextView 中的文本已经丢失。

我见过出现这种情况的情况,因为包含原始TextView 的Fragment1 实例与第二次显示的Fragment1 实例不同。如果您显示Fragment1 的两个不同实例,则第二个实例将不会显示第一个实例包含在其自己的文本视图中的文本。

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

要查看的另一件事是TextView 的填充方式。也许实际数据在某处丢失了。

【讨论】:

    【解决方案3】:

    使用实例变量在每个 Fragment 中存储数据,如果您使用的是替换,例如:

    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 数据时,也会更新 value 变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-09
      相关资源
      最近更新 更多