RecyclerView nekonečné prejdite nepracuje vnútri ViewPager2

0

Otázka

Mám horizontálne ViewPager2. Na druhý list view pager, mám RecyclerView že má nekonečné rolovanie realizovať. Použil som EndlessRecyclerViewScrollListener realizovať nekonečné prejdite.

Avšak, keď posúvania tejto RecyclerView, to nie je spúšť nekonečné rolovanie. Strana 2 z nekonečnej prejdite nikdy nie je s názvom, len strana 1.

Tu je moja trieda s ViewPager2:

public class BaseBottomNavigationViewActivity extends BaseActivity implements BottomNavigationView.OnNavigationItemSelectedListener {

    // The number of pages in the bottom navigation view
    private static final int NUM_PAGES = 5;

    // The view pager
    private ViewPager2 viewPager;

    // The pager adapter
    private FragmentStateAdapter pagerAdapter;

    // The bottom navigation view
    private BottomNavigationView bottomNavigationView;

    private NewPostBottomSheetDialogFragment newPostModalDialog;

    private RelativeLayout newPostButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        viewPager = findViewById(R.id.view_pager);
        bottomNavigationView = findViewById(R.id.bottom_navigation_view);

        // The number of screens to keep in memory
        viewPager.setOffscreenPageLimit(5);

        // Disable swiping in the view pager
        viewPager.setUserInputEnabled(false);

        // Set the pager adapter
        pagerAdapter = new BottomNavigationViewPagerAdapter(this);
        viewPager.setAdapter(pagerAdapter);

        // Register the item selected listener
        bottomNavigationView.setOnNavigationItemSelectedListener(this);

        // Set default selection (home)
        bottomNavigationView.setSelectedItemId(R.id.action_first);
    }

    @Override
    protected int getLayoutResource() {
        return R.layout.activity_base_bottom_navigation_view;
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_first:
                viewPager.setCurrentItem(0, false);
                break;
            case R.id.action_second:
                viewPager.setCurrentItem(1, false);
                break;
            case R.id.action_third:
                return false;
            case R.id.action_fourth:
                viewPager.setCurrentItem(3, false);
                break;
            case R.id.action_fifth:
                viewPager.setCurrentItem(4, false);
                break;
            default:
                break;
        }

        return true;
    }

    private static class BottomNavigationViewPagerAdapter extends FragmentStateAdapter {
        public BottomNavigationViewPagerAdapter(FragmentActivity fa) {
            super(fa);
        }

        @Override
        public Fragment createFragment(int position) {
            switch (position) {
                case 0:
                    return new FirstPageFragment();
                case 1:
                    return new SecondPageFragment();
                case 2:
                    return new ThirdPageFragment();
                case 3:
                    return new FourthPageFragment();
                case 4:
                    return new FifthPageFragment();
            }

            return null;
        }

        @Override
        public int getItemCount() {
            return NUM_PAGES;
        }
    }

}

A tu je trieda na druhej strane v ViewPager2:

public class SecondPageFragment extends Fragment {

    private MyAdapter myAdapter;

    private LinearLayoutManager layoutManager;

    private RecyclerView recyclerView;

    private EndlessRecyclerViewScrollListener scrollListener;

    private List<Object> objects = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_page_two, parent, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        recyclerView = view.findViewById(R.id.recycler_view);

        layoutManager = new LinearLayoutManager(getContext());
        recyclerView.setLayoutManager(layoutManager);

        myAdapter = new MyAdapter(getContext(), layoutManager, objects);
        recyclerView.setAdapter(myAdapter);

        scrollListener = new EndlessRecyclerViewScrollListener(layoutManager) {
            @Override
            public void onLoadMore(int page, int totalItemsCount, RecyclerView view) {
                getData(page);
            }
        };
        recyclerView.addOnScrollListener(scrollListener);
    }

    private void getData(final int page) {
        // Here I call the API to fetch the data and add them to the objects list
    }
}

Prečo nie je telefonovanie strana 2 pre RecyclerView pri rolovaní v tejto situácii a čo môžem urobiť, aby to napravil?

Vďaka!

2
0

Vám môže byť záujem o kontrolu vašej obmedzenia na ViewPager2, ako to je hostiteľom fragment obsahujúci RecyclerView - aj celá štruktúra tejto konkrétnej fragment(v XML rozloženia).

Keďže obe sú scrollable, na layout_height a layout_width štruktúry hierarchie výrazne ovplyvniť, keď udalosti recyclerView sú aktivované, niektoré z nich sa možno nikdy dosiahnuť prípade poslucháčov.

V úradných dokladov pre migráciu z ViewPager, tam je malá poznámka na podporu vnorených rolovanie tu

ViewPager2 nie je natívne podporu vnorených prejdite názory v prípadoch, keď prejdite názor má rovnakú orientáciu ako ViewPager2 objekt, ktorý ho obsahuje. Napríklad, posúvanie nebude fungovať pre vertikálne posúvanie zobrazenia vo vnútri-vertikálne orientované ViewPager2 objektu.

S predpokladom, že váš RecyclerView nie je pomocou rovnakej orientácie s viewPagermôžete spustiť svoj fragment na jeho vlastné, a ladenie ak chcete zistiť, či onLoadMore je to vlastne je aktivovaná, keď nie v viewPager kontexte/kontajner.

Ako vedľajší poznámku, nájsť si nejaký čas, aby si na Paging3 a mimo nej.

2021-11-24 07:44:35

Na RecyclerView je v skutočnosti používajú rovnakú orientáciu ako ViewPager, obe sú vertikálne.
user1695123

Najlepšiu odpoveď

0

Skončil som stanovenie to len pomocou rôznych nekonečné prejdite RecyclerView triedy:

https://stackoverflow.com/a/26561717/14968122

2021-12-03 17:41:04

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................