2012-10-04 8 views
26

कहा जाता है मैंने व्यूपेजर क्लास को बढ़ाया है और पेज चेंजलिस्टर पर लागू किया है। मैं इस व्यूपैगर का उपयोग शेरलॉक फ्रैगमेंट के अंदर सर्कलपेज इंडिकेटर के साथ संयोजन में करता हूं। ViewPager में ImageViews और TextViews शामिल हैं, कुछ भी फैंसी नहीं है।एंड्रॉइड व्यूपेजर ऑनपेजस्क्रॉलस्टेट चेंज को कभी भी

मुझे पृष्ठ बदलने के हर बार ViewPager के नीचे कुछ करने की आवश्यकता है। इसलिए, मुझे लगा कि मुझे onPageScrollStateChanged का उपयोग करने की आवश्यकता है और सत्यापित करें कि जब राज्य आईडीई है, या कुछ।

समस्या यह है कि 3 कार्यान्वित तरीकों से (ऑनपेजस्क्रॉलस्टेट चेंज, ऑनपेज सिलेक्टेड और ऑनपेजस्क्रॉल किया गया), केवल पेज पर स्क्रॉल किया जाता है (मैंने प्रत्येक विधि में लॉग संदेश के साथ चेक किया है)। ऐसा क्यों है ? नीचे कोड

public class UninterceptableViewPager extends ViewPager implements OnPageChangeListener{ 

private ArrayList<TwoRowListViewAdapter> mAdaptersList = null; 
private ListView mListView = null; 
private ProgressBar mProgressBar = null; 


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

public boolean onInterceptTouchEvent(MotionEvent event) 
{ 
    getParent().requestDisallowInterceptTouchEvent(true); 
    return super.onInterceptTouchEvent(event); 
} 


public void setAdaptersList(ArrayList<TwoRowListViewAdapter> adaptersList) 
{ 
    mAdaptersList = adaptersList; 
} 

@Override 
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
{ 
    super.onPageScrolled(position++, positionOffset, positionOffsetPixels); 
    if (positionOffset == 0) // FIXME 
     loadHistoryPage(position); 
} 

@Override 
public void onPageSelected(int position) {} 

@Override 
public void onPageScrollStateChanged(int state) {} 


// ------------------------------------------------------------------------------------------- 
// -------------- Helper Methods 
// ------------------------------------------------------------------------------------------- 


public void setListView(ListView listview) 
{ 
    mListView = listview; 
} 

public void setProgressBar(ProgressBar progressBar) 
{ 
    mProgressBar = progressBar; 
} 

private void loadHistoryPage(int position) 
{ 
    mListView.setVisibility(View.INVISIBLE); 
    mProgressBar.setVisibility(View.VISIBLE); 
    mListView.setAdapter(null); 
    mListView.setAdapter(mAdaptersList.get(position-1)); 
    mProgressBar.setVisibility(View.INVISIBLE); 
    mListView.setVisibility(View.VISIBLE); 
} 

}

उत्तर

68

आप Viewpager साथ संयोजन के रूप में PageIndicator का उपयोग करते हैं तो ViewPager की onPageChangeListener नहीं बुलाया जाता है। मुझे इसके कारण का पता नहीं है लेकिन यह तब हुआ जब मैं दोनों का उपयोग कर रहा था। हो सकता है कि पृष्ठ सूचक पृष्ठ परिवर्तन ईवेंट का उपभोग करे। इसके बजाय आपको पृष्ठ परिवर्तन श्रोता को पेजइंडिकेटर पर सेट करना चाहिए और पृष्ठ बदलते समय इसे कॉल किया जाएगा। आप इसे इस तरह कर सकते हैं:

indicator.setOnPageChangeListener(new OnPageChangeListener() { 

     @Override 
     public void onPageSelected (int page) 
     { 
      //page changed 
     } 

     @Override 
     public void onPageScrolled (int arg0, float arg1, int arg2) 
     { 
     } 

     @Override 
     public void onPageScrollStateChanged (int arg0) 
     { 
     } 
    }); 

मुझे आशा है कि यह मदद मिलेगी। चर्चा करने के लिए स्वतंत्र महसूस करें।

+0

हाँ, मुझे लगता है कि अपने इस धारणा सही है। खैर, मुझे इसे सत्यापित करने की ज़रूरत है, लेकिन यह समझ में आता है। इस सही उत्तर के लिए बहुत बहुत धन्यवाद! मैं कल समाधान का परीक्षण करूंगा और अपने निष्कर्षों की रिपोर्ट करूंगा। –

+0

ठीक है मैं आपकी प्रतिक्रिया के लिए इंतजार करूँगा .. – karn

+0

बहुत बढ़िया। यह पूरी तरह से काम करता है। आपका बहुत बहुत धन्यवाद ! –

0

setOnPageChangeListener बहिष्कृत किया गया है। का उपयोग addOnPageChangeListener

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

     } 

     @Override 
     public void onPageSelected(int position) { 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
    });