RecyclerView ไม่จำกัดเลื่อนไม่ได้ทำงานอยู่ใน ViewPager2

0

คำถาม

ฉันมีทางแนวนอน ViewPager2. สภาพนิ่งของมุมมองตัวสลับพื้นที่ทำงานฉันต้องเป็น RecyclerView มันมีไม่จำกัดการเลื่อนการจัดเตรียมไว้. ฉันเคย EndlessRecyclerViewScrollListener ต้องเตรียมกำไม่จำกัดเลื่อน.

อย่างไรก็ตามเมื่อมีการเลื่อนลงนี้ RecyclerViewมันไม่กระตุ้นไม่จำกัดการเลื่อน. หน้าที่ 2 แห่งที่ไม่จำกัดเลื่อนไม่เคยเรียกเพียงหน้า 1 ได้

นี่คือชั้นเรียนของผมกับ 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;
        }
    }

}

และนี่คือห้องสำหรับคนที่สองหน้าที่ 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
    }
}

ทำไมมันไม่เรียกหน้าสำหรับ 2 RecyclerView เมื่อมีการเลื่อนอยู่ในสถานการณ์นี้และผมสามารถทำอะไรเพื่อแก้ไขมันได้หรือเปล่า?

ขอบคุณ!

2
0

คุณอาจจะสนใจในตรวจของโครงสรางค ViewPager2 ย่างที่มันเครื่องปลายทางที่เศษชิ้นส่วนที่บรรจุ RecyclerView-ก็เรื่องโครงสร้างของพิเศษชิ้นส่วน(อยู่ในของคุณเลือกรูปแบบชื่อแฟ้ม XML).

ตั้งแต่สองอย่าง scrollable ง layout_height แล้ว layout_width ของผังแป้นพิมพ์งลำดับชั้นในผังต้นไม้ greatly ผลกระทบต่อตอนที่เหตุการณ์ของ recyclerView เป็นกระตุ้นบางคนของพวกเขาอาจจะไม่เคยติดต่อเหตุการณ์ listeners.

ในทางการเอกสารคู่มือสำหรับการย้ายฐานจาก ViewPager มันเป็นส่วนเล็กข้อความสนับสนุนสำหรับรอบการอมีการเลื่อน อยู่ที่นี่

ViewPager2 ไม่ natively สนับสนุนรอบการเลื่อนมุมมองในคดีที่ไหนที่เลื่อนมุมมองมีคนเดียวกันทิศทางเหมือ ViewPager2 วัตถุที่มีมัน สำหรับตัวอย่างเช่นการเลื่อนข้อความแบบคงไม่ทำงานสำหรับเลื่อนทางแนวตั้งมุมมองในทางแนวตั้ง-เน้นไปยั ViewPager2 เดาใจ

กับสมมติฐานที่ว่าของคุณ RecyclerView มันไม่ใช้คนเดียวกันกับปฐมนิเทศ viewPagerคุณสามารถหนีของคุณชิ้นส่วนด้วยตัวมันเองและการดีบั๊กที่จะตรวจสอบดูว่า onLoadMore จริงๆแล้วคือการกระตุ้นตอนที่ไม่อยู่ใน viewPager คอนเท็กซ์/ตู้คอนเทนเนอร์.

เป็นด้านข้างข้อหาบางอย่างเวลาต้องอ่านบ Paging3 หรือมากกว่านั้น

2021-11-24 07:44:35

ที่ RecyclerView คือที่จริงแล้วใช้มือปฐมนิเทศที่ ViewPager ทั้งสองเป็นทางแนวตั้ง.
user1695123

คำตอบที่ดีที่สุด

0

ฉันโตมากับการซ่อมนี้โดยใช้อีกไม่จำกัดเลื่อน RecyclerView นักเรียน:

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

2021-12-03 17:41:04

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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