我想刷新片段的数据时,它来自前一个屏幕。
下面是它看起来的代码。
public class SettingsHomepageActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
showFragment(new TopLevelSettings(), R.id.main_content);
}
private void showFragment(Fragment fragment, int id) {
final FragmentManager fragmentManager = getSupportFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
final Fragment showFragment = fragmentManager.findFragmentById(id);
if (showFragment == null) {
fragmentTransaction.add(id, fragment);
} else {
fragmentTransaction.show(showFragment);
}
fragmentTransaction.commit();
}
}
TopSettings extends Fragment {
@Override
public void onAttach(Context context) {
super.onAttach(context);
use(SupportPreferenceController.class).setActivity(getActivity());
}
}
在上面的代码中,您可以看到showFragment仅在onCreate()中显示。现在,当数据在SupportPreferenceController中更新并且用户按下home按钮时,它会转到onStart(),因此不会调用TopSettings,因此当数据更新时,Fragment不会刷新。
我在SettingsHomePageActivity中使用了下面的代码,
@Override
protected void onRestart() {
this.recreate();
super.onRestart();
}
但是上面的代码总是在我们转到任何页面时不断刷新Fragments。
如何克服这一点?我需要刷新片段的数据,而不是每次刷新整个片段。
1条答案
按热度按时间rsaldnfx1#
尝试刷新
onResume()
函数中的数据。正如我们所知道的,当我们回到上一个屏幕时,在这种情况下onResume()
被调用,所以如果你想刷新或更新数据,你应该在onResume()
函数中实现代码。还有一个建议是尽量维护像needToRefreshData=true
这样的标志,并在onResume()
中检查它,否则每次都会不必要地刷新它。