2010-06-06 23 views
6

के अंदर क्षैतिजस्कोलव्यू के साथ क्लिक करने योग्य नहीं हैं मेरे पास काफी जटिल ListView है।सूची दृश्य आइटम

> LinearLayout (vertical) 
    > LinearLayout (horizontal) 
    > include (horizontal LinearLayout with two TextViews) 
    > include (ditto) 
    > include (ditto) 
    > TextView 
    > HorizontalScrollView (this guy is my problem) 
    > LinearLayout (horizontal) 

मेरी गतिविधि में, एक आइटम बन जाता है (getView() कहा जाता है) मैं LinearLayoutHorizontalScrollView अंदर करने के लिए गतिशील TextView रों जोड़ने (अन्य, सरल सामान भरते समय के अलावा): प्रत्येक आइटम इस तरह दिखता है। आश्चर्यजनक रूप से, प्रदर्शन बहुत अच्छा है।

मेरी समस्या यह है कि जब मैंने HorizontalScrollView जोड़ा, तो मेरी सूची आइटम अनजान हो गईं। क्लिक किए जाने पर उन्हें नारंगी पृष्ठभूमि नहीं मिलती है और वे OnItemClickedListener को आग नहीं लगाते हैं (एक सरल Log.d कॉल करने के लिए)।

मैं अपनी सूची आइटम को फिर से क्लिक करने योग्य कैसे बना सकता हूं?


संपादित करें: सर्वोच्च LinearLayout पर android:descendantFocusability="blocksDescendants" स्थापित करने के लिए काम करने लगता है। मैं जानना चाहता हूं कि क्या अन्य तरीके हैं, हालांकि: अगर मैं अपनी सूची वस्तुओं में फोकस करने योग्य आइटम चाहता हूं तो क्या होगा?

उत्तर

8

शीर्ष LinearLayout पर android:descendantFocusability="blocksDescendants" का उपयोग करके चाल चल रही थी। अंदर के तत्वों को अभी भी "क्लिक करने योग्य" बनाया जा सकता है, वे केवल ध्यान केंद्रित नहीं कर रहे हैं (यानी आप उन्हें गैर-टचस्क्रीन डिवाइस पर क्लिक नहीं कर सकते हैं)। मेरे लिए काफी अच्छा।

0

जब मैं अपने TableLayout स्क्रॉल करने के लिए लागू किया HorizontalScrollView सूची आइटम पर क्लिक करने के लिए ठीक है, लेकिन असमर्थ काम कर रहा है मेरे लेआउट follwos के रूप में किया जाता है

LinearLayout HorizontalScrollView TableLayout ......... /TableLayout /HorizontalScrollView /LinearLayout

मैं लागू किया एंड्रॉयड: descendantFocusability = "blocksDe स्केंडेंट्स "मेरे शीर्ष सर्वाधिक लाइनरलेआउट में कोई मदद

0
android:descendantFocusability="blocksDescendants" 

मेरे लिए मदद नहीं की। तो

तो, मैंने श्रोता पैटर को महसूस किया।

public interface EventListItemOnClickListener { 
    public void itemClicked(); 
} 

और एडाप्टर के सभी श्रोताओं को सूचित

private List<EventListItemOnClickListener> listeners; 
protected void notifyOnClick(int position){ 
    for(int i=0; i<listeners.size();++i) 
    listeners.get(i).itemClicked((Event)events.get(position)); 
} 
... 
    @Override 
    public void onClick(View v) { 
     notifyOnClick(position); 
    } 
... 
संबंधित मुद्दे