2011-01-01 19 views
5

के अंदर सूची दृश्य एम्बेड करना लक्ष्य गैलरी को कार्यान्वित करना है जिसका एडाप्टर ListViews (दूसरे शब्दों में, क्षैतिज स्क्रॉलिंग गैलरी में एम्बेडेड सूची दृश्यों को लंबवत स्क्रॉल करना) को लागू करना है। यह कुछ काम के बाद काम करता है, लेकिन क्षैतिज स्क्रॉल करने का प्रयास करते समय, लिस्ट व्यू बहुत चिंतित दिखता है, जैसे कि केंद्र में कुछ चिपचिपापन होता है। मैंने गैलरी में एम्बेडेड किसी अन्य प्रकार के व्यू के साथ इस प्रकार का व्यवहार नहीं देखा है। मैंने पाया कि ListView स्पर्श इवेंट कुचल, इसलिए गैलरी पर इशारा श्रोता कभी नहीं निकाल दिया जाता,गैलरी

प्रारंभ:

यहाँ मैं क्या करने की कोशिश की है।

galleryGestureDetector = new GestureDetector(this, gallery);

फिर, गैलरी एडाप्टर की विधि getView() के अंदर के बाद ListView फुलाया कर दिया गया है और कॉन्फ़िगर:

तो गतिविधि की विधि OnCreate() में, मैं एक GestureDetector बनाया

listView.setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 
     galleryGestureDetector.onTouchEvent(event); 
     return true; 
    } 
}); 

इस मामले मैं भी OnTouchListener से सच लौटने सुनिश्चित करना है कि listView की विधि onTouchEvent() वास्तव में कहा जाता है कभी नहीं है चरम कदम पर चले गए हैं में:, मैं इस तरह कुछ कोड है। वही झटकेदार व्यवहार होता है। नतीजतन, मुझे लगता है कि मैं दो विचारों के बीच टचएवेंट() कार्यान्वयन पर प्रतिस्पर्धा करने से इंकार कर सकता हूं।

मैंने टचडिलेग अवधारणा का दुरुपयोग करने के साथ-साथ गैलरी के स्पर्श आयत को विस्तारित करने के लिए सूची दृश्य को शामिल करने और फिर सूची दृश्य को इसके लिए प्रतिनिधि को मजबूर करने की कोशिश की, लेकिन यह एक व्यर्थ प्रयास भी था।

मैं अपने हाथ फेंक दूंगा और कहूंगा कि वर्तमान में यह संभव नहीं है, लेकिन सोशल नेटवर्किंग ऐप जो DroidX के साथ पैक करता है, इसे किसी भी तरह से पूरा करता है!

+0

शायद जांचें कि आपकी सूची दृश्य गैलरी प्रदान किए जाने पर हर बार कई बार विचार/निर्माण नहीं कर रहे हैं। यह देखने के लिए कि क्या यह समस्या है, उन्हें कैशिंग (या केवल एक स्थिर क्षेत्र का उपयोग करके) कैशिंग करने का प्रयास करें। – monkjack

+0

अच्छा विचार monkjack, और वास्तव में, ऐसा लगता है कि गैलेरी चयन के बाहर जाने के बाद अपने एडाप्टर से लौटाए गए सूची दृश्यों को रीसाइक्लिंग कर रहा था। मैंने आपके द्वारा सुझाए गए विचारों को कैश करने की कोशिश की और सत्यापित किया कि 3 तत्वों का उपयोग मैं इस मुद्दे के समाधानों का परीक्षण करने के लिए कर रहा हूं कि केवल 3 विचारों को कभी बढ़ाया जाता है। दुर्भाग्यवश, मुझे एक ही परिणाम दिखाई देता है ... दृश्य को थोड़ी सी मात्रा में स्लाइड करने के बाद, यह पागल की तरह झटके लगाना शुरू कर देता है। – jkschneider

+0

और भी रहस्यमय - मैंने आज देखा कि यदि सूची सूची दृश्यमान होने के बाद मैं क्षैतिज स्क्रॉल करने का प्रयास करता हूं, तो गैलरी कभी-कभी दो दृश्यों के बीच फंस जाएगी। – jkschneider

उत्तर

5

समस्या यह है कि ListView गैलरी से स्पर्श घटनाओं को रोक रहा है और फिर दृश्य स्थिति को स्वयं बदल रहा है। यही कारण है कि जब मैं विगेट्स का उपयोग करता हूं तो मैं देखता हूं कि पीछे और आगे झटकेदार प्रभाव को देखते हैं। मैं इस गैलरी विजेट में एक बग पर विचार, लेकिन इस बीच में इसे इस तरह गैलरी उपवर्गीकरण द्वारा निर्धारित किया जा सकता है:

public class BetterGallery extends Gallery { 
private boolean scrollingHorizontally = false; 

public BetterGallery(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 

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

public BetterGallery(Context context) { 
    super(context); 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent ev) { 
    super.onInterceptTouchEvent(ev); 
    return scrollingHorizontally; 
} 

@Override 
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { 
    scrollingHorizontally = true; 
    return super.onScroll(e1, e2, distanceX, distanceY); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch(event.getAction()) { 
    case MotionEvent.ACTION_UP: 
    case MotionEvent.ACTION_CANCEL: 
     scrollingHorizontally = false; 
    } 

    return super.onTouchEvent(event); 
} 

}

आप गैलरी के स्थान पर BetterGallery उपयोग करते हैं, पूरी बात बस काम करता है ठीक!

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