简体   繁体   English

同步两个 ViewPager2

[英]Synchronizing two ViewPager2

Is there a way to synchronize two separate ViewPager2 views.有没有办法同步两个单独的 ViewPager2 视图。 Both pagers contain same number of elements.两个寻呼机都包含相同数量的元素。 I want both pagers to scroll synchronously ether by scrolling first or second ViewPager2.我希望两个寻呼机通过滚动第一个或第二个 ViewPager2 来同步滚动。

I have tried registering ViewPager2.OnPageChangeCallback like next:我已经尝试注册ViewPager2.OnPageChangeCallback如下:

viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

but none of methods can really help (maybe onPageScrolled but I don't know how to transfer that scrolling to second viewPager2).但没有一种方法能真正提供帮助(可能onPageScrolled ,但我不知道如何将滚动转移到第二个 viewPager2)。

You need to use ViewPager2.OnPageChangeCallback()您需要使用ViewPager2.OnPageChangeCallback()

Check this repository for source code https://github.com/RathodNilesh14/Synchronization-of-two-ViewPager2检查此存储库以获取源代码https://github.com/RathodNilesh14/Synchronization-of-two-ViewPager2

SAMPLE CODE示例代码

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

public class JavaActivity extends AppCompatActivity {

    ViewPager2 myFirstViewPager, mySecondViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_java);

        myFirstViewPager = findViewById(R.id.myFirstViewPager);
        mySecondViewPager = findViewById(R.id.mySecondViewPager);

        MyAdapter myAdapter = new MyAdapter(this);
        myFirstViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
        myFirstViewPager.setAdapter(myAdapter);

        mySecondViewPager.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL);
        mySecondViewPager.setAdapter(myAdapter);

        myFirstViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                mySecondViewPager.setCurrentItem(position, false);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

        mySecondViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                super.onPageScrolled(position, positionOffset, positionOffsetPixels);
            }

            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                myFirstViewPager.setCurrentItem(position, false);
            }

            @Override
            public void onPageScrollStateChanged(int state) {
                super.onPageScrollStateChanged(state);
            }
        });

    }


}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM