Grid Layout RecyclerView внутри ViewPager - пролистывание страницы от последнего элемента строки в макете сетки - PullRequest
0 голосов
/ 21 мая 2019

Это приложение для 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;
            }
        }
    });

при нажатии стрелки влево (->) из последнего элемента строки просмотра окна просмотра перейдет кследующая страница. Вместо этого мне нужно перейти к первому элементу следующей строки, не пролистывая страницу.

...