【发布时间】:2020-09-22 02:03:51
【问题描述】:
我正在使用带有 3 个片段的底部导航。在 Home-fragment 我请求 API 来获取数据并在回收器视图中显示我的问题是每当我切换片段并再次回到 Home-fragment 它正在重新创建布局并再次从 API 获取数据我只想加载一次应用启动时
这是我在片段中调用 API 的地方
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_fragment, container, false);
// return inflater.inflate(R.layout.home_fragment, container, false);
sharedPrefManager = new SharedPrefManager(getActivity());
locationTrack = new LocationTrack(getActivity());
buildGoogleApiClient();
fusedLocationClient = LocationServices.getFusedLocationProviderClient(getActivity());
getUserLatLng();
setUp(view);
netWorkCall();
return view;
}
HomeActivity 默认加载 home-fragment
if (savedInstanceState == null) {
Fragment fragment = null;
fragment = new HomeFragment();
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.content_frame, fragment, "home").addToBackStack("Home");
ft.commit();
}
}
底部导航点击监听器
private void displaySelectedScreen(int itemId) {
Fragment fragment = null;
switch (itemId) {
case R.id.action_home:
fragment = new HomeFragment();
break;
case R.id.action_profile:
if (sharedPrefManager.getAuthority()) {
fragment = new ProfileFragment();
} else {
SDConstant.switchActivity(this, LoginScreen.class);
}
break;
case R.id.action_calculator:
if (sharedPrefManager.getAuthority()) {
fragment = new CalculatorFragment();
} else {
SDConstant.switchActivity(this, LoginScreen.class);
}
break;
}
//replacing the fragment
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment, "home").addToBackStack("Home");
ft.commitAllowingStateLoss();
//ft.commitNow();
}
}
}
请指导我解决方案如何解决此重新创建 API 调用
【问题讨论】:
-
如果你的应用遵循
SingleActivity-MultipleFragments模式,那么你可以在你的Activity中调用API相关的东西。您可以在片段中漫游,在这些片段中使用Activity获取的数据,并根据需要更新数据。
标签: java android android-fragments fragment retrofit2