2011-03-09 12 views
11

मेरे पास एक साधारण ListView है और मैं चाहता हूं कि प्रत्येक आइटम को उपयोगकर्ता के स्पर्श पर हाइलाइट किया जाए। मैंने सोचा कि यह डिफ़ॉल्ट रूप से होना चाहिए लेकिन यह नहीं है। क्या आप सलाह दे सकते हैं?सूची पर सूची दृश्य को हाइलाइट कैसे करें?

ListView xml:

<ListView 
    android:id="@+id/list_view"  
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:divider="#206600" 
    android:dividerHeight="2dp" 
    android:smoothScrollbar="true" 
    android:background="#ffffff" 
    > 
</ListView> 

और मेरे एडाप्टर के कोड:

private class MyAdapter extends ArrayAdapter<Task> { 
     private LayoutInflater mInflater; 

     public MyAdapter(Context context, int resource, List<Task> list) { 
      super(context, resource, list); 
      mInflater = LayoutInflater.from(context); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = convertView; 

      if (v == null) { 
       v = mInflater.inflate(R.layout.list_item, null); 
      } 

      Task task = taskList.get(position); 

      /* Setup views from your layout using data in Object here */ 

      return v; 
     } 

उत्तर

23

आप अपना वास्तविक पंक्ति लेआउट कोड पोस्ट करना चाहते हैं, लेकिन मुझे संदेह है कि समस्या यह होगी कि आप अपनी सूची पंक्ति पर पृष्ठभूमि रंग सेट करें। डिफ़ॉल्ट रूप से, चयनकर्ता सूची आइटम के पीछे खींचे जाते हैं (जो कि अच्छे दिखते हैं, क्योंकि हाइलाइट रंग टेक्स्ट के पीछे है)। या तो अपनी सूची वस्तुओं पर पृष्ठभूमि रंग सेट न करें, या सूची दृश्य के drawSelectorOnTop एक्सएमएल विशेषता के साथ चयनकर्ता को शीर्ष पर खींचने के लिए सेट करें।

संपादित करें: तुम सच में डिफ़ॉल्ट स्थिति के लिए एक अपारदर्शी पृष्ठभूमि होनी चाहिए और drawSelectorOnTop का उपयोग नहीं करना चाहते हैं, तो आप भी इस कोशिश कर सकते हैं: अपनी सूची पंक्तियों पर एक पृष्ठभूमि सेट, लेकिन एक StateListDrawable का उपयोग सभी के लिए @android:drawable/list_selector_background उपयोग करने के लिए लेकिन डिफ़ॉल्ट स्थिति (आप इसके लिए अपने drawables फ़ोल्डर में एक XML फ़ाइल को परिभाषित कर सकते हैं; स्टेटलिस्ट documentation देखें)।

आप अपने बाहरी पृष्ठभूमि पंक्ति के अंदर लेआउट को अपने पृष्ठभूमि सेट के साथ @android:drawable/list_selector_background पर ले जा सकते हैं; इस तरह पृष्ठभूमि आपकी पृष्ठभूमि के शीर्ष पर खींचेगी, लेकिन सामग्री के नीचे।

+0

इसके अलावा, क्या मैं आपके मूल प्रश्न को गलत समझ रहा हूं? क्या आप दबाए गए राज्य के बारे में बात कर रहे हैं, या आप एक स्पर्श के बाद चुने गए चुने हुए राज्य को चाहते हैं और रद्द कर सकते हैं (जिस स्थिति में रिवेराकिड का जवाब अधिक प्रासंगिक है)? –

+0

पृष्ठभूमि को हटाने से कोई बदलाव नहीं हुआ, इसलिए मैं अब चयन देखने में सक्षम था, धन्यवाद। – Eugene

1

मेरा मानना ​​है कि इस ListAdapter में मदों की "सक्षम" विशेषता के साथ क्या करना है।

अपने एडाप्टर कोड शामिल हैं:

@Override 
public boolean areAllItemsEnabled() { 
    return true; 
} 

तो प्रत्येक आइटम क्लिक करने योग्य (और इसलिए स्पर्श किया जा रहा पर हाइलाइट होना चाहिए) होना चाहिए।

क्या आप इस सूची के लिए किस प्रकार के एडाप्टर का उपयोग कर रहे हैं, इस बारे में विवरण (और संभवतः कोड) पोस्ट कर सकते हैं?

+0

नहीं, इससे मदद नहीं मिली। मैंने एडाप्टर के लिए कोड जोड़ा है। – Eugene

+1

एचएम, वह है और बहन विधि सक्षम है (int स्थिति)। यदि आप getView() विधि के अंदर उस पर एक कॉल जोड़ते हैं और डीबगर के साथ इसके माध्यम से कदम उठाते हैं, तो आप यह पता लगा सकते हैं कि आइटम सक्षम नहीं हैं या नहीं। – Cephron

2

ListView एस टच मोड में फोकस (या चयन) का दृश्य संकेत नहीं बनाए रखता है। जब आप अपने यूआई नेविगेट करने के लिए हार्डवेयर कीबोर्ड या नियंत्रण का उपयोग करते हैं तो आप इसे केवल तभी देखेंगे।

अधिक जानकारी के लिए Google Touch Mode एंड्रॉइड ब्लॉग आलेख देखें।

तो, यदि आप केवल स्पर्श मोड का उपयोग कर रहे हैं, तो आप ListView एस पर फ़ोकस या चयन कभी नहीं देखेंगे।

0

मैंने कुछ दिनों से इसके साथ संघर्ष किया। अंत में, मुझे एक विजेट बनाना है जो Checkable इंटरफ़ेस का समर्थन करता है और मेरे एडाप्टर के getiew() फ़ंक्शन में उस विजेट/दृश्य को वापस कर देता है। और यूआई पर किए गए विकल्पों का ट्रैक रखने के लिए सूचीदृश्य ListView.CHOICE_MODE_SINGLE (या संभवतः android:choiceMode द्वारा निर्दिष्ट किसी भी अन्य मोड में होना चाहिए)।पर प्रकाश डाला रहने के लिए

तो संक्षेप में, सभी निम्नलिखित की जरूरत है जगह में सूचीदृश्य आइटम के लिए होने के लिए:

  1. ListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  2. ListAdapter.getView() वापसी के लिए एक दृश्य को लागू करता है कि Checkable इंटरफ़ेस
  3. ListView.OnItemClickListener को setItemChecked(position, true) बुलाना चाहिए आइटम को चेक करने के लिए चिह्नित करें (और इस प्रकार इसे सूचीदृश्य में हाइलाइट करें)

उम्मीद है कि यह किसी ऐसे व्यक्ति की मदद कर सकता है जो इसके साथ संघर्ष कर रहा है।

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