私が欲しいもの:
私はAndroidに2方向のエンドレスビューページャー、左から右、右から左を実装しようとしています
私がしたこと:
Endless viewpager adapterを実装しました。右から左の方向で正常に動作し、現在のアイテムの位置を で設定しましたviewPager.setCurrentItem(Integer.MAX_VALUE/2);
。
参照:
助けていただければ幸いです。
私はAndroidに2方向のエンドレスビューページャー、左から右、右から左を実装しようとしています
Endless viewpager adapterを実装しました。右から左の方向で正常に動作し、現在のアイテムの位置を で設定しましたviewPager.setCurrentItem(Integer.MAX_VALUE/2);
。
助けていただければ幸いです。
FragmentPagerAdapter
エンドレス ビューページャー アダプターを取得するには、以下を確認してください。
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Fragment getItem(int position) {
return getFragmentBasedOnPosition(position);
}
private Fragment getFragmentBasedOnPosition(int position) {
int fragmentPos = position % 3; // Assuming you have 3 fragments
switch(fragmentPos) {
case 0:
return Fragment1.newInstance();
case 1:
return Fragment2.newInstance();
case 2:
return Fragment3.newInstance();
}
}
}
ここで解決策を見つけました。
お役に立てば幸いです。
これを実現する簡単な方法の 1 つViewPager2
は、次の 3 つの基本的なアイデアを使用することです。
listOf(1, 2, 3, 4, 5)
、になる必要がありlistOf(5, 1, 2, 3, 4, 5, 1)
ます。これを行うためのサンプル コードは次のとおりです。
1.
private fun <T> List<T>.prepareForTwoWayPaging(): List<T> {
val first = first()
val last = last()
return toMutableList().apply {
add(0, last)
add(first)
}
}
pager.setCurrentItem(1, false)
pager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrolled(
position: Int,
positionOffset: Float,
positionOffsetPixels: Int
) {
// We're only interested when the pager offset is exactly centered. This
// will help create a convincing illusion of two-way paging.
if (positionOffsetPixels != 0) {
return
}
when (position) {
0 -> pager.setCurrentItem(adapter.itemCount - 2, false)
adapter.itemCount - 1 -> pager.setCurrentItem(1, false)
}
}
})
TabLayout
警告: このコードは、データ モデル コレクションのいずれかまたは空のデータを調整しません。