क्लिक किए जाने पर एक सूची दृश्य आइटम का पृष्ठभूमि रंग बदलें

मेरे ऐप में एक सूची दृश्य होता है और जब कोई उपयोगकर्ता किसी आइटम पर क्लिक करता है, तो चयनित आइटम रंग एक अलग रंग में बदल जाता है। मैंने अपनी list_main.xml फ़ाइल में स्थित मेरी सूची दृश्य में यह android: listSelector = "@ android: color/darker_gray" जोड़कर इसे लागू किया। यह वही है जो मैं ढूंढ रहा हूं, लेकिन मुझे इसके साथ समस्याएं हैं क्योंकि जब उपयोगकर्ता आइटम धारण करता है तो पृष्ठभूमि रंग भी बदलता है लेकिन इसे क्लिक नहीं करता है। इसलिए मैं सोच रहा था कि क्या यह एक बहुत ही सरल तरीका था जिसे मैं इस कोड को डाल सकता था: android: listSelector = "@ android: color/darker_gray" मेरे OnItemClick विधि के अंदर। इस तरह जब मेरी सूचीदृश्य से कोई आइटम क्लिक किया जाता है, तो मैं चयनित आइटम पृष्ठभूमि को बदलना चाहता हूं। मैं भी अपनी सूचीदृश्य को पुनर्व्यवस्थित नहीं करना चाहता हूं और चयनित वस्तुओं को शीर्ष पर रखना नहीं चाहता हूं, मैं बस उन सभी वस्तुओं को चाहता हूं जिन्हें उपयोगकर्ता ने एक अलग पृष्ठभूमि रंग के लिए क्लिक किया है, इसलिए मैं कोडिंग को इटैमक्लिक पर रखना चाहता हूं। वर्तमान में मैं अपनी सूची दृश्य के लिए डिफ़ॉल्ट sample_list_item_1 का उपयोग कर रहा हूं।

ऐप के बारे में अतिरिक्त जानकारी: यह एक ट्यूटोरियल ऐप की तरह है जहां उपयोगकर्ता को ट्यूटोरियल नामों की एक सूची प्रस्तुत की जाती है। जब उपयोगकर्ता किसी नाम पर क्लिक करता है तो यह स्ट्रीम-सक्षम लिंक लोड करता है ताकि उपयोगकर्ता इसे ऐप के अंदर स्ट्रीम कर सके (यह पहले से ही हो चुका है)। मैंने एक टोस्ट संदेश भी जोड़ा है जो दिखाता है कि जब उपयोगकर्ता स्ट्रीम-सक्षम लिंक पर क्लिक करता है (यह थोड़ी सी है जो मैं टोस्ट संदेश की बजाय eccept चाहता हूं, यह चयनित आइटम के पृष्ठभूमि रंग को darker_grey में बदल देता है)। मैं इन सब-स्टेटमेंट के अंदर ऐसा करने में सक्षम था। उदाहरण के लिए:

ऑनक्रेट के अंदर ()

String[] Tutorial = getResources().getStringArray(R.array.Tutorial);
spinner1 = (ListView) findViewById(R.id.spinner1);
spinner1.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, Tutorial));
spinner1.setOnItemClickListener(new OnItemClickListener() 
{
    public void onItemClick(AdapterView<?> parent, View v, int pos, long id) 
    {
        if(pos==0)
        {
           //Do nothing       
        }
        else if(pos==1)
        {
            Intent i = new Intent();
            i.setAction(Intent.ACTION_VIEW);
            Uri uri = Uri.parse("https://download846.mediafire.com/8cfxi4026iog/x4ywqe8dc8u2r4f/Hetalia+Season+1+Episode+1.mp4"); /* this is a random link to show you that my programing so far works(Enter link to the selected tutorial here)*/
            i.setDataAndType(uri, "video/*");
            try {
                startActivity(i);
            } catch (ActivityNotFoundException e) {
                //Handle exception
            } catch (Exception e) {
               //Handle exception 
            }
        Toast.makeText(parent.getContext(), parent.getItemAtPosition(pos).toString(), Toast.LENGTH_SHORT).show();       
       //android:listSelector="@android:color/darker_gray"
        }           
    }           
}

यदि आप अभी भी समझ में नहीं आता कि मेरा क्या मतलब है, तो Google Play स्टोर में एनीम प्लस टीवी नामक एक ऐप है जो मेरे जैसा कुछ करता है। ऐप में, जब आप एक सेरी के एपिसोड पर क्लिक करते हैं (उदाहरण: नारुतो) यह एपिसोड के स्ट्रीम-सक्षम लिंक को लोड करता है, और उस चयनित एपिसोड के टेक्स्ट रंग को भी बदलता है ताकि जब उपयोगकर्ता एपिसोड देखे, तो वह नहीं होगा कुछ स्ट्रीम-सक्षम लिंक के बाद से वह कौन सा एपिसोड देख रहा था, इस बारे में भ्रमित है कि वास्तव में आपको उस वीडियो का वास्तविक शीर्षक नहीं देता है जहां आप देख रहे हैं। लेकिन उनके विपरीत मैं सिर्फ चयनित ट्यूटोरियल की पृष्ठभूमि को बदलने के लिए चाहता हूं

0
आपको कस्टम सूचीदृश्य बनाना होगा
जोड़ा लेखक sr.farzad, स्रोत

1 उत्तर

आपके पास दो विकल्प हैं।

1.progamatically: In this case when you set the OnItemClickListener for your ListView , get the child and setBackground for it .

        String[] inputs = {"test1","test2","test3"};
    final ListView l = (ListView)findViewById(R.id.listview);
    l.setAdapter(new ArrayAdapter(this,android.R.layout.simple_list_item_1 ,inputs));
    l.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view, int position,
                long id) {
            l.getChildAt(position).setBackgroundColor(android.R.color.black);
        }
    });

आप रंग res/मानों के तहत color.xml फ़ाइल में रंगों को परिभाषित कर सकते हैं (यदि आपके पास नहीं है तो इसे बनाएं) और एंड्रॉइड.R.color.black के बजाय उन्हें R.color.gray (उदाहरण) जैसे उपयोग करें।

2. कस्टम सूची चयनकर्ता का उपयोग करना

फ़ोल्डर खींचने योग्य के तहत listelector.xml बनाएँ। सूचियों में आप इस तरह के विभिन्न राज्यों को संभाल सकते हैं:

    <?xml version="1.0" encoding="utf-8"?>
    
    <!-- Selector style for listrow -->
    
    
    
    

आपके मामले में मुझे लगता है कि पहले तरीके से उपयोग करना सबसे अच्छा है। पूछें कि क्या आपके कोई अन्य प्रश्न हैं :)

0
जोड़ा
पहले विकल्प का उपयोग करके और जोड़ना: l.getChildAt (स्थिति) .setBackgroundColor (android.R.color.bl और zwnj; ack); मेरे प्रोग्रामिंग में मुझे एंड्रॉइड.आर.color.black पर एक त्रुटि दें
जोड़ा लेखक Zamornews, स्रोत
आपको getResources() का उपयोग करना चाहिए। getcolor (android.R.color.black)
जोड़ा लेखक kicker86, स्रोत
अपनी कक्षा से पहले इस लाइन को जोड़ें: @SuppressLint ("संसाधन Ascolor")।
जोड़ा लेखक Aerox, स्रोत