Это приложение для Android TV. У меня RecyclerView
внутри ViewPager
.RecyclerView
имеет GridLayoutManager
.Таким образом, при нажатии стрелки влево (->) из последнего элемента строки ViewPager
переходит на следующую страницу.Вместо этого мне нужно перейти к первому элементу следующей строки без прокрутки страницы.
Я пытался реализовать свой собственный менеджер компоновки сетки, ViewPager
и ViewPagerAdapter
, но ничего не получалось.
<androidx.viewpager.widget.ViewPager
android:id="@+id/pager"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="24dp"
android:layout_marginEnd="8dp"
app:layout_constraintBottom_toBottomOf="@+id/linearLayout_details_bg"
app:layout_constraintEnd_toEndOf="@+id/linearLayout_details_bg"
app:layout_constraintStart_toEndOf="@+id/img_poster"
app:layout_constraintTop_toBottomOf="@id/tab_layout">
</androidx.viewpager.widget.ViewPager>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="8dp"
android:clickable="true"
android:focusable="true"
app:layout_constraintBottom_toTopOf="@+id/pager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/img_poster"
app:layout_constraintTop_toBottomOf="@id/barrier"
app:tabMaxWidth="100dp"
app:tabMode="scrollable"
app:tabTextAppearance="@style/TextAppearance.AppCompat.Small" />
открытый класс SeasonAdapter расширяет FragmentPagerAdapter {
private ArrayList<Season> seasonList;
private int color;
public SeasonAdapter(FragmentManager fm) {
super(fm);
}
SeasonAdapter(FragmentManager fm, ArrayList<Season> seasonList, int color) {
super(fm);
this.seasonList = seasonList;
this.color = color;
}
public void setColor(int color) {
this.color = color;
}
@Override
public Fragment getItem(int position) {
return new VODMovieDetailsActivity.SeasonFragment(color);
}
@Override
public int getCount() {
return seasonList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return seasonList.get(position).getName();
}
}
seasonAdapter = new SeasonAdapter(getSupportFragmentManager(), movie.getSeasons(), colorMuted);
viewPager.setAdapter(seasonAdapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.d(TAG, "onPageScrollStateChanged: wentOut 2");
}
@Override
public void onPageSelected(int position) {
Log.d(TAG, "onPageScrollStateChanged: wentOut 3");
}
@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_SETTLING:
Log.d(TAG, "onPageScrollStateChanged: wentOut 1");
case ViewPager.SCROLL_STATE_IDLE:
Log.d(TAG, "onPageScrollStateChanged: wentOut");
break;
}
}
});
при нажатии стрелки влево (->) из последнего элемента строки просмотра окна просмотра перейдет кследующая страница. Вместо этого мне нужно перейти к первому элементу следующей строки, не пролистывая страницу.