【发布时间】:2021-09-13 17:22:41
【问题描述】:
我正在使用带有 5 个选项卡的 BottomNavigationView。最初,一旦应用程序启动,我就会加载第一个选项卡。当我单击任何其他选项卡时,会进行 API 调用并加载数据。现在,当我再次单击上一个选项卡(在启动时加载)时,将调用 API 以再次加载相同的数据。
我不想再次加载数据,并且希望在没有新 API 调用的情况下显示具有相同数据的片段。
我的代码:
public class MainActivity extends AppCompatActivity implements NavigationBarView.OnItemSelectedListener {
private BottomNavigationView bottomNavigationView;
public static ViewPager2 viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewpager);
bottomNavigationView = findViewById(R.id.navigation);
bottomNavigationView.setOnItemSelectedListener(this);
getTabs();
}
public void getTabs() {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentAdapterMain adapter = new FragmentAdapterMain(fragmentManager, getLifecycle());
viewPager.setAdapter(adapter);
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
switch (position) {
case 0:
bottomNavigationView.getMenu().findItem(R.id.one).setChecked(true);
break;
case 1:
bottomNavigationView.getMenu().findItem(R.id.two).setChecked(true);
break;
case 2:
bottomNavigationView.getMenu().findItem(R.id.three).setChecked(true);
break;
case 3:
bottomNavigationView.getMenu().findItem(R.id.four).setChecked(true);
break;
case 4:
bottomNavigationView.getMenu().findItem(R.id.five).setChecked(true);
break;
}
}
});
}
@SuppressLint("NonConstantResourceId")
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.one:
viewPager.setCurrentItem(0, false);
break;
case R.id.two:
viewPager.setCurrentItem(1, false);
break;
case R.id.three:
viewPager.setCurrentItem(2, false);
break;
case R.id.four:
viewPager.setCurrentItem(3, false);
break;
case R.id.five:
viewPager.setCurrentItem(4, false);
break;
}
return true;
}
}
我不想使用viewPager.setOffscreenPageLimit(size),因为它会在启动时一次性加载所有 5 个片段中的数据(我不想在启动时调用所有 5 个 API)。
【问题讨论】:
标签: java android android-fragments android-viewpager2