数据更改时刷新片段内容的方法(如调用onCreateView)

Her*_*tyk 6 android listview refresh fragment android-fragments

Activity在布局中有一个片段容器.Fragment可以显示3种不同的颜色.片段包含一个列表视图,该视图使用自定义适配器i显示数据.

因此onCreateView,在我查询数据库以获取数据之后,每个列表元素都会被创建.

但有时我的数据库中的某些数据可能会发生变化,我想重新绘制/重新创建Listview.

  • 刷新片段视图的最佳方法是什么(我的意思是要求的资源越少)?
  • 有没有方法可以手动调用onCreateView?

Mic*_*rte 6

拆卸并用它固定

Fragment currentFragment = getFragmentManager().findFragmentByTag("YourFragmentTag");
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.detach(currentFragment);
fragmentTransaction.attach(currentFragment);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

或搜索片段

Fragment currentFragment = getActivity().getSupportFragmentManager().findFragmentById(R.id.container);
Run Code Online (Sandbox Code Playgroud)

  • 我不能这样做 - 我想从片段的实例中调用“刷新”...从我的自定义适配器甚至从 MainActivity 因此它需要我调用静态方法。并且“getFragmentManager”不能在静态方法中使用。 (2认同)

Zon*_*Zon 5

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

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {

super.setUserVisibleHint(isVisibleToUser);

  // Refresh tab data:

  if (getFragmentManager() != null) {

    getFragmentManager()
      .beginTransaction()
      .detach(this)
      .attach(this)
      .commit();
  }
}
Run Code Online (Sandbox Code Playgroud)