android - माता-पिता ViewPager को स्क्रॉल करने से कैसे रोकें जब बच्चा ViewPager आखिरी मद में है?



android-layout android-viewpager (1)

मेरे पास एक नेस्टेड दृश्यपैर है जो शानदार ढंग से काम करता है एकमात्र मुद्दा यह है कि, एक बार जब बच्चा व्यू पेगर आखिरी मद में होता है और मैं आगे स्क्रॉल करता हूं, तो माता-पिता व्यू-पेपर स्क्रॉल मुझे यह व्यवहार नहीं चाहिए

मुझे यह कैसे हासिल होगा?

यहां एक उदाहरण है, मेरे Activity_main.xml में मेरे पास माता-पिता व्यू पेजर है, जिसमें तीन टुकड़े पृष्ठ हैं।

 <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

टुकड़ा लेआउट में से एक में, fragment_categories.xml , मेरे पास एक और ViewPager है, जो कि Activity_main.xml में पैरेंट व्यू पृष्ठ के लिए एक बच्चा है,

<android.support.v4.view.ViewPager
    android:id="@+id/mViewPager"
    android:layout_width="match_parent"
    android:layout_height="@dimen/offer_height"
    android:layout_marginTop="2dp"
    android:overScrollMode="never"/>

यह सब ठीक काम करता है लेकिन जब बच्चा देखेंपैगर अपनी आखिरी मद पर पहुंचता है, और मैं अधिक स्क्रॉल करता हूं, पैरेंट व्यू पृष्ठ अगले पृष्ठ पर जाता है मुझे यह नहीं चाहिए। मैंने इससे पहले माता-पिता व्यू-पेपर पर संपर्क को छूने की कोशिश की, और वह काम नहीं कर रहा था मुझे लगता है कि मैं यह गलत कर रहा हूँ? (हां, मैंने XML में com.project.CustomViewPager में टैग बदल com.project.CustomViewPager और यह कोशिश की।)

CustomViewPager.java :

  public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
        if(v != this && v instanceof ViewPager) {
            return false;
        }

        return super.canScroll(v, checkV, dx, x, y);
    }

पहले इसे नीचे की तरह swipeable राज्य को बदलने के लिए एक कस्टम विवपैगर बनाएँ:

public class CustomViewPager extends ViewPager {
    private boolean canScroll = true;
    public CustomViewPager(Context context) {
        super(context);
    }
    public CustomViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public void setCanScroll(boolean canScroll) {
        this.canScroll = canScroll;
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return canScroll && super.onTouchEvent(ev);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return canScroll && super.onInterceptTouchEvent(ev);
    }

    public boolean isCanScroll() {
        return canScroll;
    }
}

दूसरा अपना दृश्य पेजर बदलें जिसे आप इसे अपने CustomViewPager के स्वाइप CustomViewPager को अक्षम करना चाहते हैं

अपने दृश्य पेजर्स प्राप्त करें:

CustomViewPager myCustomViewPager = (CustomViewPager) findViewById(R.id.my_custom_pager);
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);

अपने ViewPager पर एक onTouchListener जोड़ें:

viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction())
                {
                    case MotionEvent.ACTION_DOWN:
                        myCustomViewPager.setCanScroll(false);
                        break;

                    case MotionEvent.ACTION_UP:
                        myCustomViewPager.setCanScroll(true);
                        break;
                }
                return false;
            }
        });

अगर आपको वास्तव में यह देखने की ज़रूरत है कि आपके व्यूअर की वर्तमान स्थिति क्या है:

    int pos = 0;
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                   pos = position;
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

और if pos == yourAdaptersItemCount-1 आप अपने if pos == yourAdaptersItemCount-1 सकते हैं if pos == yourAdaptersItemCount-1 आपके एडैप्टर आईटैम if pos == yourAdaptersItemCount-1 और अक्षम करें या अपने कस्टमव्यूपैगर को सक्षम करें।

सौभाग्य।





android-viewpager