以下情况:我有一个带导航抽屉的应用程序。有几个片段,一个是快速显示相关信息的仪表板,另一个是显示用户保存的数据列表。在仪表板上是一个视图,它显示第二个片段中的特定项目,当单击此视图或第二个片段中的任何项目时,我将转到一个新的活动来编辑所选项目。
问题是从编辑活动返回时,编辑会反映在片段中。导航回ListFragment很简单,我只是重新填充列表适配器,但对于仪表板上的单个View,我无法正确刷新它。通过覆盖onResume()并在View上调用invalidate(),我只能在导航抽屉中的片段之间进行切换时刷新,但是从编辑Activity返回时不会刷新它,即使我已经验证了onResume()被称为这个片段。
我试过在这个视图及其布局上调用invalidate(),postInvalidate(),创建一个新的视图实例,但它只会刷新使用Drawer更改片段。什么可能阻止invalidate()从活动返回时重绘我的视图?
修改 有问题的视图是一个自定义视图,其中包含两个TextView和一个切换通知的按钮。无论用户将其更改为什么,要更改的数据应该只是这些TextView的文本。该视图从SQLite数据库中提取数据,该数据库在用户从编辑活动返回之前更新,因此在重新加载仪表板时,视图收集的数据应该反映更新,因此事实上它不会让我相信这个观点还没有被刷新,因为文档说,"如果视图可见,onDraw(android.graphics.Canvas)将在未来的某个时刻被调用。 / em>"。以下是我的代码,它可以用抽屉更改片段,但不能从活动中返回,但在后一种情况下仍会调用它:
@Override
public void onResume() {
super.onResume();
notify.invalidate(); //the view in question
}
答案 0 :(得分:1)
通过调用invalidate()
,只会重新绘制View
。这对View
显示的数据没有影响。如果您要更新自定义视图中显示的数据,则必须再次将其设置为onResume
中的自定义视图,就像我在此示例中使用TextView
一样:
@Override
public void onResume() {
super.onResume();
this.textView.setText(textToDisplay);
}