2012-07-26 11 views
13

में काम नहीं कर रहे परिवर्तनीय चयनकर्ता चयनित पंक्ति को हाइलाइट करने के लिए ListView में प्रत्येक आइटम के लिए पृष्ठभूमि के रूप में एक खींचने योग्य चयनकर्ता है। आइस क्रीम सैंडविच में Eveything ठीक काम करता है, लेकिन जेली बीन में काम नहीं कर रहा है। कोई दस्तावेज नहीं मिल रहा है कि यह कहने से कि क्या बदलाव हो सकता है जिससे काम करना बंद कर दिया जा सकता है और इसे ठीक करने के लिए मुझे क्या करना है।जेली बीन

काम नहीं करके, मेरा मतलब है कि जब मैं ListView में एक पंक्ति पर क्लिक करता हूं तो आइटम का पृष्ठभूमि रंग @color/blue रंग नहीं बदल रहा है, लेकिन यह आईसीएस में करता है।

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:background="@color/listing_selector"  
> 

    <TextView 
     android:id="@+id/text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
    /> 

</RelativeLayout> 

यह नीले रंग संसाधन:

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

    <item android:state_focused="true" android:drawable="@color/blue" /> 

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

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

    <item android:state_selected="true" android:drawable="@color/blue_selected" /> 

    <item android:drawable="@android:color/transparent" /> 

</selector> 

यह ListView आइटम के लेआउट है:

इस चयनकर्ता कोड मैं उपयोग कर रहा हूँ (listing_selector.xml) है

<resources> 
    <color name="blue">#ff33b5e5</color>  
</resources> 

अद्यतन 1:

की कोशिश की drawable फ़ोल्डर में color फ़ोल्डर से चयनकर्ता चलती है और इस के लिए कोड अपडेट:

android:background="@drawable/listing_selector" 

अद्यतन 2:

इसके अलावा, ListView पर, इस जोड़ने की कोशिश की:

<ListView android:id="@android:id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:listSelector="@drawable/listing_selector" 
    /> 

अद्यतन 3:

मैंने सोचा कि यह मेरे कोड में कुछ हो सकता है, लेकिन मैंने के onListItemClick से सभी कोड हटा दिए और अभी भी selector काम नहीं कर रहा है।

अद्यतन 4:

मैं करने के लिए state_selected या state_activated काम नहीं कर रहा है कि यह संकुचित करेंगे, तब तक state_pressed काम करने

अद्यतन 5 लगता है:

मुझे लगता है कि मैं गलत था । मुझे नहीं लगता कि चयनकर्ता को पहचाना जा रहा है। मैं अपने चयनकर्ता के रूप में हाइलाइट किए गए अंतर्निहित ListView को भ्रमित कर रहा था। अब मैं सोच रहा हूं कि मेरे प्रोजेक्ट की स्थापना के तरीके के साथ कुछ करना है या नहीं। मेरे पास लाइब्रेरी क्लास में चयनकर्ता है। शायद आईसीएस से जेबी तक कुछ बदल गया, हालांकि चयनकर्ता को मेरे ऐप के प्रोजेक्ट में ले जाने से यह ठीक नहीं लग रहा था।

अद्यतन 6:

ठीक है, कुछ और बाल खींचने के बाद, मैं इसे नीचे संकुचित कर दिया है, फिर से, या तो state_selected या state_activated नहीं करने के लिए पहचाना जा रहा है, के रूप state_pressed के लिए रंग बदलने काम करता है जिसका अर्थ है मेरे चयनकर्ता को पहचाना जा रहा है। टिप्पणियों में से मेरे ऐप के साथ कुछ ऐसा लगता है क्योंकि अन्य लोग जेली बीन के साथ काम करने वाले चयनकर्ताओं को प्राप्त करने में सक्षम हैं।

हालांकि दिलचस्प कुछ और बात यह है कि drawable डिफ़ॉल्ट स्थिति के लिए मान को पहचानना नहीं है। जहां मेरे पास color/transparent है, मुझे लगता है कि एक रंग में बदलने से सूची उस रंग में बदल जाएगी, लेकिन ऐसा नहीं होता है।

इसके अलावा, यह आईसीएस में भी काम नहीं कर रहा है।

अद्यतन 7:

और भी अधिक बाल खींच के बाद, मुझे पता चला है कि देर तक दबाए है कि आइटम के रंग में एक मेनू आइटम परिणामों पर बदला जा रहा। बस एक आइटम पर क्लिक करना अभी भी काम नहीं करता है। यह भी सुनिश्चित नहीं है कि साधन क्या हैं।

** अंतिम अद्यतन: **

मैं छोड़ देना, मैं चयनकर्ता हटा दिया और बस क्लिक पर ListView ताज़ा और याद स्थिति क्लिक किया और कोड से यह प्रकाश डाला कर रहा हूँ। आदर्श नहीं है, लेकिन ठीक करने का प्रयास करने के प्रयास के लायक नहीं है।

+0

जब आपने अपना अद्यतन 2 आजमाया, तो क्या आपने एंड्रॉइड को हटा दिया: आपकी सूची आइटम से पृष्ठभूमि। मैं एंड्रॉइड का उपयोग करता हूं: सूची के लिए सूची चयनकर्ता, और फिर कोई एंड्रॉइड नहीं: सूची आइटम सूची के लिए पृष्ठभूमि परिभाषित किया गया है; और सब कुछ मेरे लिए काम करता है। इसके अलावा, मुझे यकीन नहीं है कि यह संबंधित है लेकिन मेरे पास एंड्रॉइड भी है: cacheColorHint = "@ null"। – Chris

+0

@ क्रिस हाँ, कोशिश की कि या तो काम नहीं किया। मैंने एक नया अपडेट जोड़ा (# 5)। मैं सोच रहा हूं कि क्या समस्या मेरे पास है जिस तरह से मेरा प्रोजेक्ट सेटअप है? –

+0

प्रोजेक्ट सेटअप इस मुद्दे से असंबंधित होना चाहिए कि आपको लगता है कि आपके एंड्रॉइड निर्भरताएं दिख रही हैं .... जो ग्रहण मूल रूप से आपको करने के लिए मजबूर करता है। ड्रॉबल बनाम रंगीन चीज़ पर युक्ति, एंड्रॉइड का उपयोग करें: res/color में xml चयनकर्ताओं के लिए रंग, और एंड्रॉइड: res/drawable में xml चयनकर्ताओं के लिए drawable। आपके पास जो कुछ है उसके लिए शायद रंग के बजाए इसे आकर्षित करने के लिए उपयोग करने का कोई कारण नहीं है। और रंगों में पूर्ण अस्पष्टता है, इसलिए # ff33b5e5 # 33b5e5 – syklon

उत्तर

1

listing_selector.xmlres/drawable फ़ोल्डर में हो सकता है और इस तरह से अपनी RelativeLayout की android:background विशेषता सेट करना होगा:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:background="@drawable/listing_selector"  
> 
+0

'listings_selector.xml' को 'res/drawable' फ़ोल्डर में ले जाया गया, लेकिन अभी भी काम नहीं करता है। –

+0

@ KrisB K_Anas इस पंक्ति पर जोर दे रहा था: '@ drawable/listings_selector'। –

+0

@ शेरिफेलखतिब यकीन नहीं है कि आपका क्या मतलब है। मैंने 'listings_selector.xml' को 'res/drawable' में ले जाया और' एंड्रॉइड: पृष्ठभूमि =" @ रंग/listings_selector "से' एंड्रॉइड: कोड = "@ drawable/listings_selector" से कोड की उस पंक्ति को बदल दिया। क्या मैं कुछ और याद कर रहा हूँ? –

0

मैं कारण है कि एक संस्करण में अपने काम करने और नहीं किसी अन्य रूप में काम कर कहते हैं कि नहीं कर सकते, लेकिन मैं एक विकल्प मिल गया उपाय।

अपने चयनकर्ता

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

इस कोशिश करो और मुझे पता है में संसाधनों

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <drawable name="blue">#00F</drawable> 
    ... 
</resources> 

उपयोग इस रंग drawable में एक drawable के रूप में अपने रंग को परिभाषित करें।

2

ठीक है, मुझे लगता है कि यह आपके चयनकर्ता के साथ एक मुद्दा है। State_focused और state_activated को हटाने का प्रयास करें। आप अपने चयनकर्ता के लिए इस की कोशिश कर सकते:

<!-- Disabled State --> 
<item 
    android:state_enabled = "false" 
    android:state_focused = "true" 
    android:state_pressed = "true" 
    android:drawable="@android:color/transparent"> 
</item> 
<item 
    android:state_enabled = "false" 
    android:state_focused = "true" 
    android:drawable="@android:color/transparent"> 
</item> 

<!-- Pressed State --> 
<item 
    android:state_pressed = "true" 
    android:state_focused = "true"> 
    <shape> 
     <solid android:color="@color/blue"/> 
    </shape> 
</item> 
<item 
    android:state_pressed = "true" 
    android:state_focused = "false"> 
    <shape> 
     <solid android:color="@color/blue"/> 
    </shape> 
</item> 

<!-- Normal State --> 
<item 
    android:drawable="@android:color/transparent"> 
</item> 

मैंने पाया कि मैं क्योंकि पूर्व आईसीएस फोन पर android:drawable की भी बजाय एक आकार वस्तु का उपयोग करने, जरूरत है, पूरी सूची दबाया सूची के बजाय उस रंग से हाइलाइट किया जाएगा आइटम।

आप अपने state_selected कोड में भी जोड़ सकते हैं, लेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे किया जाएगा। उन राज्यों के लिए जेली बीन के लिए डिफ़ॉल्ट चयनकर्ता कोड देखें: list_selector_background.xml

0

मुझे लगता है कि यह ठीक काम करता है !!

अपने चयनकर्ता xml फ़ाइल कोड: -

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

     <item android:drawable="@color/gray" android:state_focused="true"/> 
     <item android:drawable="@color/gray" android:state_pressed="true"/> 
     <item android:drawable="@color/orange" android:state_activated="true"/> 
     <item android:drawable="@color/orange" android:state_selected="true"/> 
     <item android:drawable="@color/orange"/> 

    </selector> 

अब रेस फ़ोल्डर के अंतर्गत एक फ़ोल्डर मान-v16 बना सकते हैं और यह रंग उस में दाखिल कर दिया।

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <color name="gray">#4f4f4f</color> 
    <color name="orange">#e26c0e</color> 

</resources> 

और फिर सूचीदृश्य:

<ListView 
     android:id="@+id/listView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="20dp" 
     android:listSelector="@drawable/listing_selector" > 
</ListView> 

आशा इस काम करता है! संस्करण 4 पर परीक्षण किया।1

+0

काम करने वाला एकमात्र अंतर यह है कि मैंने रंगों को मूल्य-v16 के तहत रखा है। – Chandrashekhar

+0

धन्यवाद, मेरी परियोजना के तरीके के तरीके में कुछ गड़बड़ होनी चाहिए, इसलिए मुझे लगता है कि जेली बीन में कुछ भी नहीं बदला है। फिर भी इसके माध्यम से काम करने की जरूरत है। –

0

API Docs से:

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

इस प्रकार, सुझाए गए आदेश के अनुसार अपने चयनकर्ताओं के राज्यों को पुन: व्यवस्थित करने का प्रयास करें। आपके मामले में यह होगा:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_pressed="true" android:drawable="@color/blue" /> 
    <item android:state_focused="true" android:drawable="@color/blue" /> 
    <item android:state_selected="true" android:drawable="@color/blue_selected" /> 
    <item android:state_activated="true" android:drawable="@color/blue_selected" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 
संबंधित मुद्दे