首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当数据发生变化时刷新片段内容的方法(如recall onCreateView)

当数据发生变化时刷新片段内容的方法(如recall onCreateView)
EN

Stack Overflow用户
提问于 2015-09-03 01:38:10
回答 12查看 84.2K关注 0票数 13

我在布局中有一个带有片段容器的Activity。它可以显示3种不同的Fragment。这些片段包含一个Listview,它使用我制作的自定义适配器显示数据。

因此,每个列表元素都是在onCreateView期间创建的,也就是在我查询数据库以获得数据之后。

但有时我的数据库中的一些数据可能会发生变化,所以我想在Listview中重新绘制/重新创建它。

  • 刷新我的片段视图的最佳方法是什么(我的意思是,对资源的要求较低)?
  • 是否有手动调用onCreateView的方法?
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2015-09-03 01:42:59

将其分离并附加

代码语言:javascript
复制
Fragment currentFragment = getFragmentManager().findFragmentByTag("YourFragmentTag");
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(currentFragment);
fragmentTransaction.attach(currentFragment);
fragmentTransaction.commit();

或使用搜索片段

代码语言:javascript
复制
Fragment currentFragment = getActivity().getSupportFragmentManager().findFragmentById(R.id.container);
票数 14
EN

Stack Overflow用户

发布于 2018-02-28 14:40:20

有一种非常有用的Fragment方法,可用于刷新片段。

代码语言:javascript
复制
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) {
        //Write down your refresh code here, it will call every time user come to this fragment. 
       //If you are using listview with custom adapter, just call notifyDataSetChanged(). 
    }
}
票数 4
EN

Stack Overflow用户

发布于 2018-06-10 01:32:29

组合了两个答案并删除了if (isVisibleToUser),因为它使setUserVisibleHint以不可预测的异步顺序调用,片段既可以刷新,也可以不刷新。我发现这段代码(在你的片段中)是稳定的:

代码语言:javascript
复制
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

  // Refresh tab data:

  if (getFragmentManager() != null) {

    getFragmentManager()
      .beginTransaction()
      .detach(this)
      .attach(this)
      .commit();
  }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32359727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档