2010-06-09 7 views
12

मैं पर Android 2.1 के साथ एक समस्या है नहीं बुलाया जाता है। यह एक बग की तरह दिखता है।एंड्रॉयड: AbsListView.OnScrollListener SCROLL_STATE_IDLE के बाद SCROLL_STATE_TOUCH_SCROLL (संस्करण 2.1)

मैं अपने ListView के लिए एक OnScrollListener संलग्न।

मैं विधि onScrollStateChanged(AbsListView view, int scrollState) उपयोग कर रहा हूँ मेरी सूचीदृश्य की पुस्तक के राज्य की निगरानी के लिए।

  1. SCROLL_STATE_FLING:

    scrollstate 3 मूल्य (प्रलेखन से लिया गया) मान सकता है उपयोगकर्ता था पहले स्पर्श का उपयोग कर स्क्रॉल कर दिया गया है और एक फ़्लिंग प्रदर्शन किया था। एनीमेशन अब एक स्टॉप

  2. SCROLL_STATE_IDLE पर विचार कर रहा है: दृश्य स्क्रॉलिंग नहीं है। सूची नेविगेट निष्क्रिय अवस्था में जा रहा है के बाद से इन संक्रमणों को एनिमेट नहीं कर रहे हैं के रूप में ट्रैकबॉल मायने रखता है का उपयोग करते हुए ध्यान दें।
  3. SCROLL_STATE_TOUCH_SCROLL: उपयोगकर्ता स्पर्श का उपयोग कर स्क्रॉल है, और उनके अंगुली को स्क्रीन

मुझे लगता है कि SCROLL_STATE_IDLE हमेशा अन्य दो राज्यों में से एक के बाद पारित हो जाएगा पर अब भी है। एंड्रॉइड संस्करण 2.1 के अलावा यह हमेशा सत्य है। SCROLL_STATE_IDLESCROLL_STATE_TOUCH_SCROLL के बाद पारित नहीं किया गया है, तो समस्या तब भी होती है जब आप स्क्रॉल को अपने आप से रोक दें। यह अजीब व्यवहार मेरी सूची छोड़ देता है एक अनिश्चित स्थिति में देखें।

Someonelse एक ही समस्या है? "गंदे" गंदे काम के लिए सुझाव?

+0

यह कोई अभी तक निर्धारित किया गया है? – st0le

उत्तर

2

मैं 2.2 पर एक समान मुद्दा मिल गया।

यदि सूची काफी बड़ी है, और मैं नीचे स्क्रॉल करता हूं, तो मुझे पहली बार CROLL_STATE_TOUCH_SCROLL मिल गया है जबकि मेरी उंगली स्क्रीन पर है। जब मेरी उंगली स्क्रीन छोड़ देती है तो मुझे SCROLL_STATE_FLING मिल गया। जब मेरा विचार चलना बंद कर दिया गया है तो मुझे SCROLL_STATE_IDLE मिल गया।

लेकिन, यदि स्क्रॉल के दौरान, यह या तो शीर्ष या नीचे देखें, मैं केवल मूल्यों को स्क्रॉल/फ़्लिंग करता हूं और कभी निष्क्रिय नहीं होता।

मैंने रोमैन गाय से शेल्व परियोजना की जांच की और उसके कार्यान्वयन को 2.2.x पर एक ही समस्या का सामना करना पड़ा। मुझे आश्चर्य है कि उसने अभी तक ध्यान दिया है या नहीं।

मैं 2.3.x

2

मैं इस के लिए एक समाधान के बारे में कुछ (कम से कम एपीआई स्तर 9+, जहां मैं अभी भी बग दिखाई दे रही है के लिए) में पाया गया के साथ अभी तक प्रयास नहीं किया है। मैं एक ग्रिड व्यू का उपयोग कर रहा हूं, लेकिन मेरा मानना ​​है कि इसे ListView के लिए भी काम करना चाहिए।

मैं GridView का एक उपवर्ग उपयोग कर रहा हूँ जहाँ मैं ओवरस्क्रॉल (ऊपर या नीचे) का पता लगाने कर रहा हूँ:

public class CustomGridView { 
    private boolean mIsOverScrolled = false; 

    @Override 
    protected void onOverScrolled(int scrollX, int scrollY, 
         boolean clampedX, boolean clampedY) { 
    mIsOverScrolled = true; 
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); 
    } 

    public boolean isOverScrolled() { 
    return mOsOverScrolled; 
    } 

    public void clearOverScroll() { 
    mIsOverScrolled = false; 
    } 
} 

फिर, CustomGridView की मेरी OnScrollListener में, मेरे पास है:

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 
          int totalItemCount) { 
    if (gridView.isOverScrolled()) { 
    gridView.clearOverScroll(); 
    } 

    // ... 
} 

अब जब मैं OnScrollListener.SCROLL_STATE_IDLE की जांच कर रहा हूं, तो मैं यह भी जांचता हूं कि !gridView.isOverScrolled() है या नहीं। मुझे यकीन नहीं है कि यह आपके विशिष्ट उपयोग मामलों को ठीक करता है, लेकिन उम्मीद है कि आप बग के बावजूद अपने वर्तमान स्थिति को निर्धारित करने के लिए जानकारी के अतिरिक्त भाग का उपयोग कर सकते हैं।

0

मैं इस एक ही समस्या थी और बग सूची DeRagan ने उल्लेख किया पर एक समाधान पोस्ट किया है: Link

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