我在 ViewPager
中有 5 个 fragment 。在MainActivity
中初始化ViewPager
:
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
CalendarFragment scheduleFragment = new CalendarFragment(); // this should be in getItem()
ServicesFragment servicesFragment = new ServicesFragment(); // this should be in getItem()
ReviewsFragment reviewsFragment = new ReviewsFragment(); // this should be in getItem()
NotificationFragment notificationFragment = new NotificationFragment(); // this should be in getItem()
ProfileFragment profileFragment = new ProfileFragment(); // this should be in getItem()
viewPagerAdapter.addFragment(scheduleFragment); // this line can cause crashes
viewPagerAdapter.addFragment(servicesFragment); // this line can cause crashes
viewPagerAdapter.addFragment(reviewsFragment); // this line can cause crashes
viewPagerAdapter.addFragment(notificationFragment); // this line can cause crashes
viewPagerAdapter.addFragment(profileFragment); // this line can cause crashes
viewPager.setAdapter(viewPagerAdapter);
}
在 ProfileFragment
中,我使用 google map
。我初始化为 onCreateView()
:
if (mMap == null) {
final OnMapReadyCallback mapListener = this;
new Handler().postDelayed(() -> {
if (isAdded()) {
mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(mapListener);
}
}, 1000);
}
尝试在onViewCreated()
和onResume()
上初始化,结果是一样的。
所以问题是,当我按下 5 个菜单项中的 4 个时,它会挂起半秒。因为当您单击 4 fragment NotificationFragment
时,会同时创建 5 fragment ProfileFragment
,也就是说,它们可以工作:
D/== Profile Fragment ==: onAttach() D/== Profile Fragment ==: onCreateView() D/== Profile Fragment ==: onViewCreated() D/== Profile Fragment ==: onResume()
问题:
是否可以确保当您单击菜单项时,仅触发与我单击的此
fragment
相关的方法,而不会找到接下来初始化的fragments
?是这样,但是
ProfileFragment
中的google map 初始化并没有延迟主线程?
更新:
我刚刚意识到Fragment
的打开速度很慢,因为layout
,这是因为Google Maps
fragment 而不是因为OnMapReadyCallback
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
当我从 layout.xml
中删除 google map
时,它运行得很快。但我需要谷歌地图
。那么现在该怎么办,如何解决?
最佳答案
您可以使用viewPagerAdapter.setOffscreenPageLimit(2);
,这将缓存未使用的 fragment
关于java - ViewPager 中 fragment 之间的转换工作缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48470097/