2013-05-27 11 views
12

पर मैं तो मैंOnClickListener scrollview

scroller.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // This is all you need to do to 3D flip 
       AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT); 
      } 

     }); 

करते लेकिन जब मैं स्पर्श इस ट्रिगर नहीं हो रही है तत्वों

ScrollView scroller = (ScrollView)findViewById(R.id.scrollView); 

मैं scrollview के लिए एक onClickListener साथ जोड़ने की आवश्यकता के बहुत कुछ के साथ एक scrollview की है। कोई विचार?

+0

आप यकीन है कि यह ट्रिगर नहीं हो रही है कर रहे हैं? इसे लॉग करने का प्रयास करें या ऑनक्लिक विधि में टोस्ट दिखाएं और देखें, अगर यह काम करता है। – Ahmad

+0

हाँ मैंने कोशिश की। यह ट्रिगर नहीं हो रहा है। उस विचार के अंदर कुछ उप-विचार हैं जो इसके कारण हैं? –

उत्तर

8

ऐसा इसलिए है क्योंकि ScrollView के बच्चे को उपयोगकर्ता की स्पर्श घटना मिल रही है, न कि ScrollViewScrollView पर काम करने के लिए onClickListener के लिए आपको ScrollView के प्रत्येक बच्चे को क्लिक करने योग्य = झूठी विशेषता सेट करनी होगी।

अन्यथा वैकल्पिक स्क्रॉलव्यू के बच्चों पर onClickListener सेट करने और इसे संभालने के लिए वैकल्पिक हो सकता है।

5

सबसे अच्छा समाधान LinearLayoutScrollView पर डालने लगता है और setOnClickListener पर सेट करें।

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/myLayout" 
     android:clickable="true" 
     android:orientation="vertical"> 

     <!-- content here --> 
    </LinearLayout> 
</ScrollView> 
गतिविधि में

:

LinearLayout lin = (LinearLayout) fragment.rootView.findViewById(R.id.myLayout); 

lin.setOnTouchListener(new setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      // Whatever 
     } 
}); 
4

आप scrollview के बच्चे पर सीधे setOnClickListenerसेट करना होगा।

एक ScrollView के बाद से केवल एक ही बच्चा हो सकता है, तो आप बस इस दृष्टिकोण का उपयोग कर सकते हैं:

ScrollView scrollView = //... 

View.OnClickListener mOnClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // ... 
} 

//Set the onClickListener directly on the ScrollView's child 
scrollView.getChildAt(0).setOnClickListener(mOnClickListener); 
+0

यह सही उत्तर है। यह काम करता है, और यहां सुझाए गए विकल्प हैं ... suboptimal। – aaaidan

+0

इस समाधान के साथ एकमात्र समस्या यह है कि जब तक आप श्रोता सेट अप करने से पहले 'स्क्रॉलव्यू' के बच्चे को पेड़ में जोड़ा जाता है तब तक आपको प्रतीक्षा करनी होगी। यह सुंदर नहीं है, लेकिन मैंने 'getChildAt (0)' चलाने से पहले ऐसा होने के लिए बस एक पोस्ट का उपयोग किया था। – aaaidan