代码之家  ›  专栏  ›  技术社区  ›  Shadow

如何刷新碎片数据时,从以前的屏幕android?

  •  1
  • Shadow  · 技术社区  · 2 年前

    当片段的数据来自上一个屏幕时,我想刷新它。

    下面是代码的外观。

    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中更新时,当用户按下主页按钮时,它会转到onStart(),因此不会调用TopSettings 因此当数据被更新时片段将不会被刷新。

    我在设置主页活动中使用了以下代码,

    @Override
    protected void onRestart() {
        this.recreate();
        super.onRestart();
    }
    

    但每当我们转到任何页面时,上面的代码总是不断刷新碎片。

    如何克服这一点?我需要刷新片段的数据,但不是每次都刷新整个片段。

    0 回复  |  直到 2 年前
        1
  •  0
  •   TNT    2 年前

    尝试刷新中的数据 onResume() 作用正如我们在这种情况下回到上一个屏幕时所知道的那样 onResume() 正在被调用,因此如果您想刷新或更新数据,您应该在中实现代码 onResume() 作用 还有一个建议是尽量保持flag样 needToRefreshData=true 并办理入住手续 onResume() ,否则每次都会进行不必要的刷新。