2010-12-09 10 views
8

मैं अलग बच्चे की गतिविधियों के साथ मेरी TabActivity को लागू किया है:एंड्रॉयड: GestureDetector टैब्स (TabActivity, Tabwidget) के साथ काम नहीं कर रहा (gestureDetector.onTouchEvent (घटना) हमेशा गलत)

intent = new Intent().setClass(this, MyChildTabActiviy.class); 
// Initialize a TabSpec for each tab and add it to the TabHost 
spec = getTabHost.newTabSpec("tag").setIndicator("indicator", getResources().getDrawable(R.drawable.icon)).setContent(intent); 
getTabHost.addTab(spec); 
... 

अब तक कोई समस्या नहीं है, सब कुछ पूरी तरह से काम करता है ठीक। मैं टैब के बीच प्रोग्रामेटिक रूप से स्विच कर रहा हूं, गतिविधि समूह के साथ टैब के भीतर गतिविधियों को बदल रहा हूं, जैसे कि यह कई ट्यूटोरियल्स में दिखाया गया है।

लेकिन मेरी समस्या यह है कि जब मैं एक झुकाव इशारा करने के लिए जांचना चाहता हूं तो मेरा इशारा Detector.onTouchEvent (घटना) हमेशा झूठी वापसी कर रहा है, इस प्रकार कोई इशारा पंजीकृत नहीं है।

यह gestureDetector की मेरी दिया गया है:

public class MyChildTabActiviy extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // ... building views, controls, etc. 
     GestureDetector gestureDetector = new GestureDetector(this, new MyGestureDetector()); 
    } 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 
class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
    return false; 
    // left to right swipe and right to left swipe 
    if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
    //... fling logic ... 
    return true; 
    } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
    //... fling logic ... 
    return true; 
    } 
    return false; 
    } 
} 

बात है, कि इस कोड (और यह भी फ़्लिंग का पता लगाने) पूरी तरह से ठीक काम करता है, जब मैं इन गतिविधियों शुरू कर (वहाँ चार बुनियादी गतिविधियों रहे हैं, कि मैं कभी-कभी अन्य गतिविधियों पर स्विच करता हूं) TabActivity के बाहर, उदाहरण के लिए एक लॉन्चर गतिविधि के रूप में। लेकिन मैं इसे टैबएक्टिविटी के भीतर काम नहीं कर सकता। मैंने पहले ही जेस्चरडिएक्टर को टैबएक्टिविटी में जोड़ने की कोशिश की है, लेकिन यह काम नहीं करता है। मैंने जेस्चरडेक्टर को कुछ लेआउट व्यू या बटन, व्यूफ्लिपर्स इत्यादि जैसे विशिष्ट दृश्यों में जोड़ने की कोशिश की लेकिन यह काम नहीं करता है। जब मैं डिबगिंग हूँ, मैं देख सकता हूँ कि स्पर्श घटना शुरू हो रहा है और एक प्रस्ताव पंजीकृत है, लेकिन यह सिर्फ एक फ़्लिंग या किसी अन्य संकेत के रूप में मूल्यांकन नहीं किया गया है।

तो मेरी सवाल है, एंड्रॉयड में टैब्स के साथ GestureDetectors के उपयोग के बारे में कोई सीमाओं देखते हैं कर रहे हैं? जैसा कि मैंने कहा, इशारा एक टैबएक्टिविटी के बाहर पूरी तरह से पंजीकृत हैं।

मैं बहुत कोई है जो जवाब जानता है की मदद की सराहना करेंगे। यदि कोई सीमा है, तो उस समस्या के लिए कोई कामकाज कैसे प्राप्त कर सकता है?

जवाब के लिए अग्रिम धन्यवाद।

+0

[ग्रिड लेआउट पर फ़्लिंग जेस्चर डिटेक्शन] का संभावित डुप्लिकेट (http://stackoverflow.com/questions/937313/fling-gesture-detection-on-grid-layout) – BergQuester

उत्तर

19

जवाब पर एक नज़र उल्लेख here है। वह आपके जैसा ही काम करता है, लेकिन यदि आप उच्चतम रेटेड उत्तर पर पहली टिप्पणी देखते हैं, तो सीडीएसबीओ ने इसे ऑनडाउन को लागू करके और सही लौटकर काम किया। मुझे यकीन नहीं है कि इसकी आवश्यकता क्यों है, लेकिन यह मेरे लिए काम करता है।

+1

इससे मुझे भी मदद मिली! मेरे पास कुछ ऑनलिंग कोड था जो 1.5 और 1.6 में ठीक काम कर रहा था लेकिन 2.1 से शुरू हुआ यह काम करना बंद कर दिया ... डाउन() में सही लौटने से समस्या ठीक हो गई। – Justin

+0

धन्यवाद ... यह अच्छी तरह से काम किया है ... जरूरत OnDown() विधि के साथ-साथ ... – ahsan

+0

@Object जब मैं ओवरराइड 'onDown()' मेरी 'onFling()' बुलाया नहीं गया है। – BBdev

7

@Abhinav के जवाब (जो btw मुझे भी मदद की) करने के लिए एक पूरक के रूप में, मैं कहना है कि मैं onDown() अधिभावी लगता है कि जरूरत है SimpleOnGestureListener में उसके डिफ़ॉल्ट कार्यान्वयन false वापस जाने के लिए है, क्योंकि चाहते हैं। श्रोता तक पहुंचने वाला पहला व्यक्ति ACTION_DOWN होने के कारण, यह घटना को त्याग देगा, जो कुछ भी हो।

+0

आह यही कारण है। व्याख्या करने के लिए समय लेने के लिए धन्यवाद। –