Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在特定情况下刷新视图时遇到问题_Android_Android Fragments_Refresh_Invalidation - Fatal编程技术网

Android 在特定情况下刷新视图时遇到问题

Android 在特定情况下刷新视图时遇到问题,android,android-fragments,refresh,invalidation,Android,Android Fragments,Refresh,Invalidation,情况是这样的:我有一个带有导航抽屉的应用程序。有几个片段,一个是仪表板,用于快速显示相关信息,另一个显示用户保存的数据列表。仪表板上有一个视图,显示第二个片段中的特定项目,单击此视图或第二个片段中的任何项目时,我将转到一个新活动编辑所选项目 问题在于,当从编辑活动返回时,如何使编辑反映在片段中。导航回ListFragment很容易,我只需重新填充列表适配器,但对于仪表板上的单个视图,我无法使其正确刷新。通过重写onResume()并在视图上调用invalidate(),我只能在导航抽屉中的片段之

情况是这样的:我有一个带有导航抽屉的应用程序。有几个片段,一个是仪表板,用于快速显示相关信息,另一个显示用户保存的数据列表。仪表板上有一个视图,显示第二个片段中的特定项目,单击此视图或第二个片段中的任何项目时,我将转到一个新活动编辑所选项目

问题在于,当从编辑活动返回时,如何使编辑反映在片段中。导航回ListFragment很容易,我只需重新填充列表适配器,但对于仪表板上的单个视图,我无法使其正确刷新。通过重写onResume()并在视图上调用invalidate(),我只能在导航抽屉中的片段之间切换时刷新它,但是从编辑活动返回时不会刷新它,即使我已经验证了正在为此片段调用onResume()

我曾尝试在此视图及其布局上调用invalidate()、postInvalidate(),创建视图的新实例,但它仍然只会在使用抽屉更改片段时刷新。从活动返回时,什么可以阻止invalidate()重新绘制我的视图

编辑 该视图是一个自定义视图,包含两个文本视图和一个切换通知的按钮。要更改的数据应该只是这些文本视图的文本,无论用户将其更改为什么。视图正在从SQLite数据库中提取数据,该数据库在用户从编辑活动返回之前更新,因此在重新加载仪表板时,视图正在收集的数据应该反映更新情况,因此,鉴于文档中说,“如果视图可见,将来某个时候将调用onDraw(android.graphics.Canvas)。“。以下是我的代码,用于更改抽屉的片段,但不用于从活动返回,尽管在后一种情况下仍会调用它:

@Override
public void onResume() {
    super.onResume();
    notify.invalidate(); //the view in question 
}

调用
invalidate()
只会重新绘制
视图
。这对
视图
显示的数据没有影响。如果要更新自定义视图中显示的数据,必须在
onResume
中将其重新设置为自定义视图,就像我在本例中使用
文本视图

@Override
public void onResume() {
    super.onResume();

    this.textView.setText(textToDisplay);
}

invalidate()
视图中显示的数据有什么关系?
向我们展示一些相关代码,并解释您所说的
视图的类型。您没有告诉我任何我不知道的事情,但
invalidate()是什么
或者一般来说,绘图过程与自定义视图中显示的数据有关?我可以告诉您,这与此无关。问题只是您没有更新onResume()中的
TextView
。这就是您必须做的。设置
TextView
值,而不要调用
invalidate()
。如果您将自定义视图的代码或
片段
编辑到您的问题中,我可以给您更具体的建议。好吧,我明白了,它现在起作用了,我误解了重新绘制视图的含义。我想它实际上删除了对象,并从onCreate()重新启动它.非常感谢!我很高兴能帮上忙,我会写一个正确的答案。