android - माता-पिता ViewPager को स्क्रॉल करने से कैसे रोकें जब बच्चा ViewPager आखिरी मद में है?
android-layout android-viewpager (1)
पहले इसे नीचे की तरह 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
और अक्षम करें या अपने कस्टमव्यूपैगर को सक्षम करें।
सौभाग्य।
मेरे पास एक नेस्टेड दृश्यपैर है जो शानदार ढंग से काम करता है एकमात्र मुद्दा यह है कि, एक बार जब बच्चा व्यू पेगर आखिरी मद में होता है और मैं आगे स्क्रॉल करता हूं, तो माता-पिता व्यू-पेपर स्क्रॉल मुझे यह व्यवहार नहीं चाहिए
मुझे यह कैसे हासिल होगा?
यहां एक उदाहरण है, मेरे 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);
}