2010-01-25 17 views
26

मैं इसका उपयोग कर रहा हूं, लेकिन यह हमेशा 0 देता है, भले ही मैंने सूची के अंत तक स्क्रॉल किया हो।एंड्रॉइड: ListView.getScrollY() - क्या यह काम करता है?

+1

यदि आप जो खोज रहे हैं वह पिक्सल की संख्या है जो सूची के शीर्ष पर गायब हो जाता है जब उपयोगकर्ता स्क्रॉल डाउन पर मेरा [यहां देखें] [http://stackoverflow.com/questions/10808387/android- हो रही-सटीक-स्क्रॉल-स्थिति-इन-लिस्टव्यू/13415273 # 13415273) – Maria

+0

सही [समाधान] (http://stackoverflow.com/questions/12727594/android-listview-current-scroll-location-y-pixels/35594825 # 35594825) – Sarasranglt

उत्तर

31

getScrollY() वास्तव में व्यू पर एक तरीका है, सूची दृश्य नहीं। यह पूरे दृश्य की स्क्रॉल राशि का जिक्र कर रहा है, इसलिए यह लगभग हमेशा 0

यदि आप जानना चाहते हैं कि ListView की सामग्री कितनी दूर स्क्रॉल की गई है, तो आप listView.getFirstVisiblePosition() का उपयोग कर सकते हैं;

+0

धन्यवाद आदमी :) जो वास्तव में बहुत कुछ बताता है :) – cV2

+8

ध्यान दें कि getVirstVisiblePosition * आइटम * वापस * स्थिति * वापस नहीं करेगा, इस प्रकार यह कुछ ऐसा नहीं है जिसे आप स्क्रॉल प्राप्त करने के विकल्प के रूप में उपयोग कर सकते हैं परिस्थिति को छोड़कर सूची आइटम ठीक वही ऊंचाई हैं। –

+0

क्या यह व्यूपोर्ट के शीर्ष पर या अंत में स्क्रूल्व्यूव की स्क्रूलीव स्थिति प्राप्त करता है? –

4

यह काम करता है, यह दृश्य दृश्य के शीर्ष से पिक्सेल में दृश्य के स्क्रॉल किए गए हिस्से का शीर्ष भाग देता है।getScrollY() दस्तावेज़ीकरण देखें। असल में यदि आपकी सूची पूर्ण दृश्य ले रही है तो आपको हमेशा 0 मिल जाएगा, क्योंकि सूची के स्क्रॉल किए गए हिस्से का शीर्ष हमेशा स्क्रीन के शीर्ष पर होता है।

आप अगर आप एक सूची के अंत में कर रहे हैं देखने के लिए क्या करना चाहते हैं क्या कुछ इस तरह है:

public void onCreate(final Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.main); 
    // The list defined as field elswhere 
    this.view = (ListView) findViewById(R.id.searchResults); 
    this.view.setOnScrollListener(new OnScrollListener() { 
      private int priorFirst = -1; 
      @Override 
      public void onScroll(final AbsListView view, final int first, final int visible, final int total) { 
       // detect if last item is visible 
       if (visible < total && (first + visible == total)) { 
        // see if we have more results 
        if (first != priorFirst) { 
         priorFirst = first; 
         //Do stuff here, last item is displayed, end of list reached 
        } 
       } 
      } 
    }); 
} 

priorFirst काउंटर के लिए कारण कभी कभी स्क्रॉल है कि घटनाओं को कई बार उत्पन्न किया जा सकता है, तो है आपको सूची के अंत तक पहुंचने के लिए पहली बार प्रतिक्रिया करने की आवश्यकता है।

यदि आप एक ऑटो-बढ़ती सूची करने की कोशिश कर रहे हैं, तो मैं यह tutorial सुझाऊंगा।

संबंधित मुद्दे