如何刷新片段'onResume?

Posted

技术标签:

【中文标题】如何刷新片段\'onResume?【英文标题】:How to refresh fragments 'onResume?'如何刷新片段'onResume? 【发布时间】:2013-12-15 18:41:59 【问题描述】:

我想刷新来自 Activitiy 的片段。 (我们称之为活动A) 活动 A 包含片段。

当我完成活动 B 时,活动 A 应该刷新片段。

我在想这会在 onResume 中完成吗?我尝试通过意图简单地重新启动活动,但这对可用性不友好。

那么当我恢复活动时如何刷新片段?

【问题讨论】:

“刷新”是什么意思?你的意思是要重新加载数据,还是要让 A 重新显示,还是? ...“刷新片段”是什么意思?! 基本上我想重新加载数据。因为我想“重启”片段。所以每个片段中的 OnCreateView 都会被再次调用。 (因此在那里重新加载数据) 我会将设置代码放在 onStart() 中。 onCreate() 和/或 onCreateView() 方法只会使布局膨胀并连接小部件(findViewById() 的东西)。 我刚刚发现您可以在片段中使用 OnStart...我是 android 新手,所以是的...无论如何,谢谢! 【参考方案1】:

把这段代码放进去

onResume()

例如,当你回到你的片段时,你想更新你的列表视图。

@Override
public void onResume() 
    super.onResume();
    if (allowRefresh)
    
        allowRefresh = false;
        lst_applist = db.load_apps();
        getFragmentManager().beginTransaction().detach(this).attach(this).commit();
    

这里getFragmentManager().beginTransaction().detach(this).attach(this).commit();

此行分离并重新附加片段,以便更新您的内容。

【讨论】:

如何从活动中做到这一点? 我可以在这里写什么(这个) 如果你想将此逻辑移动到Activity中,请在onPostResume()方法内进行以避免Activity state lost error 此答案缺少的是您需要更改 allowRefresh 值的其他位置。在这种情况下,在onPause 中应该是true,然后在onDestroyView 中应该是false【参考方案2】:

总是在显示片段之前调用onResume()。即使是第一次创建片段。因此,您只需将您的地址从 onViewCreated() 移动到 onResume

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

//move your code from onViewCreated() here 


【讨论】:

【参考方案3】:

我同意 Mehul 但你也可以这样做。如果你想替换你的片段,你可以说

@Override
public void onResume() 
    super.onResume();
    if (allowRefresh)
    
        allowRefresh = false;
        lst_applist = db.load_apps();
        getFragmentManager().beginTransaction().replace(Fragment_Container,fragment).commit();
    

【讨论】:

以上是关于如何刷新片段'onResume?的主要内容,如果未能解决你的问题,请参考以下文章

来自后台堆栈的片段 onResume

保存以编程方式为片段创建的视图并在 onresume 中恢复

替换片段后未调用 OnDestroyView 和 OnResume

Android片段生命周期:onResume调用了两次

使用 ViewPager 滑动时,片段没有调用 OnResume()

为啥 RequireView() 不返回视图 onResume()?