2011-12-19 17 views
9

मुझे पता है कि एंड्रॉइड टचमोड में कुछ भी हाइलाइट नहीं करता है। लेकिन मैं जीमेल एप्लिकेशन के समान कुछ कर रहा हूं जिसमें आप बाईं तरफ से सामान चुनते हैं और गतिविधि के दाहिने तरफ विवरण दिखाते हैं (आश्चर्य है कि Google ने ऐसा कैसे किया)।ListView में चयनित आइटम को हाइलाइट कैसे करें?

तो कहानी मुझे बाईं ओर सूची दृश्य में क्या चुना गया है, इसे हाइलाइट करना है। मैं कुछ इसी तरह के सवाल मिल गया है और समाधान मूल रूप से कर रहे हैं: एडाप्टर के getView विधि और setBackground चयनित स्थिति

2.setBackground दृश्य onItemClick के लिए 1.override

और पराग-कोश चयन

के लिए यह स्पष्ट लेकिन उनमें से कोई भी अजीब व्यवहार के कारण मेरे लिए काम नहीं करता है: जैसा कि मैं एक आइटम पर क्लिक करता हूं और इसे हाइलाइट करता हूं, इसके बाद पांचवां आइटम भी हाइलाइट किया जाता है, और इसलिए जैसे ही मैं सूची को स्क्रॉल करता हूं।

कोई सुझाव? धन्यवाद!

उत्तर

21

listView.setChoiceMode (int choiceMode) का उपयोग करें;

पैरामीटर

choiceMode CHOICE_MODE_NONE, CHOICE_MODE_SINGLE में से एक, या CHOICE_MODE_MULTIPLE वर्ग से

http://developer.android.com/reference/android/widget/AbsListView.html#setChoiceMode(int)

तुम भी MultiChoiceModeListener जोड़ने की जरूरत है, तो आप कर सकते हैं android.widget.AbsListView CHOICE_MODE_SINGLE

(android.widget.AbsListView.MultiChoiceModeListener)

का संदर्भ लें नीचे

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List16.html

+0

क्या यह कुछ भी करता है? मैंने कोशिश की लेकिन चयनकर्ता हालांकि नहीं रहता .. – Han

+0

और अधिक व्याख्या –

+0

बहुत धन्यवाद! एक मल्टीचॉइसमोड लिस्टनर जोड़कर और एक्सएमएल फाइल में एडाप्टर की पृष्ठभूमि को सेट करके यह काम करता है! लेकिन मुझे आश्चर्य है कि Android केवल पृष्ठभूमि रंग क्यों लेता है जब आइटम का चयन किया जाता है .. इसलिए स्वचालित रूप से – Han

1

कई आइटमों को हाइलाइट करने का कारण शायद इसलिए है क्योंकि आप या तो हैं: संपूर्ण दृश्य का पुन: उपयोग करना, या इन दोनों विचारों की पृष्ठभूमि को उसी ड्रायबल उदाहरण पर सेट करना। यदि आपके पास स्क्रीन पर दो बार समान ड्रॉबल है, तो पहले की सभी घटनाएं अन्य सभी के साथ होती हैं, क्योंकि यह तर्क ड्रायबल के उदाहरण में लागू होता है।

इस का समाधान करने के लिए, या तो: फिर से उपयोग नहीं करते अनेक पंक्तियों के लिए दृश्य, या फिर से उपयोग नहीं करते अनेक पंक्तियों के लिए ड्रॉएबल (एक नया एक प्रत्येक समय) देखें

मैं इस संसाधन गहन लगता है और यह है, लेकिन जब तक आपके पास एक बेहतर समाधान नहीं है, यह पता चला कि यह सबसे आसान समाधान है।

+0

धन्यवाद आदमी चुनते हैं, तो अब मैं जहां कोड दृश्य पुनः उपयोग कर लेता देखने के लिए कोशिश कर रहा हूँ ..। बीटीडब्लू, क्या पृष्ठभूमि को बदलने के बजाय चयनकर्ता को हाइलाइट के रूप में शीर्ष पर रहने देना संभव है? यदि यह करने योग्य है तो यह अधिक समझ में आता है। – Han

0

नमूना listviews की नकल करता है शीर्ष पर लोगों में आइटम कारण, वे भी उनमें से पृष्ठभूमि की नकल करता। आपको getView() फ़ंक्शन में अपने आइटम की पृष्ठभूमि में से प्रत्येक को सेट करना होगा। GetView() में प्रत्येक आइटम में आपको चयनित दोनों और अचयनित लोगों के लिए पृष्ठभूमि सेट करना होगा।

16
इस

ListView में ListFragment

उजागर चयनित आइटम

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) 
{ 

    for(int a = 0; a < parent.getChildCount(); a++) 
    { 
     parent.getChildAt(a).setBackgroundColor(Color.TRANSPARENT); 
    } 

    view.setBackgroundColor(Color.GREEN); 
} 
2

//// @ drawable/list_selector

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:drawable="@drawable/list_item_bg_normal" 
android:state_pressed="false" android:state_selected="false" android:state_activated="false"/> 

<item android:drawable="@drawable/list_item_touch" 
android:state_pressed="true"/> 

<item android:drawable="@drawable/list_item_touch" 
android:state_pressed="false" android:state_selected="true"/> 

<item android:drawable="@drawable/list_item_bg_pressed" 
android:state_activated="true"/> 

</selector> 

//////// कस्टम listactivity के लिए है या //////////// और ListView

<ListView 
    android:id="@+id/list_slidermenu" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:dividerHeight="1dp" 
    android:listSelector="@drawable/list_selector" 
    android:background="@color/list_background" 
    android:divider="#060606"/> 

/////////////////////// सूचीदृश्य आइटम

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_selector"> 

    <ImageView 
    android:id="@+id/icon" 
    android:layout_width="35dp" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="12dp" 
    android:layout_marginRight="12dp" 
    android:contentDescription="@string/desc_list_item_icon" 
    android:src="@drawable/ic_home" 
    android:layout_centerVertical="true" /> 

    </RelativeLayout> 
0

उपयोग इस सूची चयनकर्ता के रूप में:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/list_bg" /> 
</selector> 

और इस list_bg :

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="@color/list_bg_color" /> 
</shape> 

के बाद से मैं इसे लिखा नहीं था पसंदीदा हाइलाइट रंग

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