2013-10-04 5 views
8

एक से अधिक बार निकाल दिया, सूची दृश्य मैं चेकबॉक्स के साथ एक ListView है: जब सूचीदृश्य onCheckedChanged चेकबॉक्स

  • OncheckedChanged(..) पर उपयोगकर्ता चिह्नित/अचिह्नित आइटम को पुन: कहा जाता है जब उपयोगकर्ता onItemClick(.....)
  • के माध्यम से क्लिक करें ListItem

    1. Oncheckedchanged(..) कहा जाता है

    क्या यह ज्ञात मुद्दा है? घटनाओं को अलग करने के लिए कैसे।

    public View getView(int position, View convertView, ViewGroup parent) { 
    
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
        LayoutInflater inflator = context.getLayoutInflater(); 
        convertView = inflator.inflate(R.layout.row, null); 
        viewHolder = new ViewHolder(); 
        viewHolder.text = (TextView) convertView.findViewById(R.id.label); 
        viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check); 
        viewHolder.imageview= (ImageView) convertView.findViewById(R.id.imageView1); 
        viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    
           @Override 
           public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
            int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag. 
            list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state. 
           } 
          }); 
        convertView.setTag(viewHolder); 
        convertView.setTag(R.id.label, viewHolder.text); 
        convertView.setTag(R.id.check, viewHolder.checkbox); 
        convertView.setTag(R.id.imageView1, viewHolder.imageview); 
    
    } else { 
        viewHolder = (ViewHolder) convertView.getTag(); 
    } 
    viewHolder.checkbox.setTag(position); // This line is important. 
    viewHolder.imageview.setTag(position); 
    viewHolder.text.setText(list.get(position).getName()); 
    viewHolder.checkbox.setChecked(list.get(position).isSelected()); 
    
    
    //  change the default-image here 
    if(list.get(position).getcontact_id()==5) 
    { 
        viewHolder.imageview.setImageResource(android.R.drawable.ic_dialog_map); 
    }... 
    .. 
    
    
    return convertView; 
    } 
    

    संपादित

    onCheckedChanged()

    1. एक बार कहा जाता है, जब कोई आइटम का चयन किया जाता है और उपयोगकर्ता चेकबॉक्स
    2. क्लिक करता है सूची जब उपयोगकर्ता क्लिक 3 आइटम के होते हैं और अगर किसी अन्य आइटम पर, इटैमक्लिक() पर आक्रमण किया जाता है और चेक किए गए चेंज() को 3 बार निकाल दिया जाता है (= संख्या: सूचीदृश्य में आइटमों का)
    +0

    यदि हम आपका कोड देख सकें तो यह बहुत अच्छा होगा ... –

    +0

    कोड का कौन सा हिस्सा-। onclickitem() या customadapter? – user755

    +0

    मैं जगह है जहाँ आप स्थापित कर रहे हैं अपने 'OnCheckChangedListener' को देखने के लिए अच्छा होगा लगता है ... – Darwind

    उत्तर

    6

    अपेक्षित व्यवहार है कि:

    • onCheckedChanged(CompoundButton buttonView, boolean isChecked), हर आइटम के लिए कहा जाता है, जब भी वे जाँच कर रहे हैं/अनियंत्रित। एंड्रॉइड ने आपके लिए सभी वस्तुओं की स्थिति को ट्रैक करने का निर्णय लिया है और हर बार जब भी यह बदला गया था, आपको प्रत्येक आइटम के लिए कॉल करता है। isChecked पैरामीटर के साथ आप जो भी हुआ उसे अलग करने में सक्षम हैं।

    • onItemClick() जब भी क्लिक किया गया आइटम में से एक कहा जाता है - यह आवश्यक रूप से आइटम के भीतर चेकबॉक्स नहीं है, लेकिन कहीं भी। आम तौर पर आइटम बाद में चुना जाता है - फिर से, हमेशा नहीं।

    • यदि आपको पता होना चाहिए कि वास्तव में कौन सा आइटम वास्तव में सूची दृश्य से चयनित है, तो OnItemSelectedListener.onItemSelected() का उपयोग करें। यह चयन (पूरी वस्तु) पाने के लिए बुलाया जाता है।

    Btw: आप मैन्युअल रूप से एक चेकबॉक्स के व्यवहार prgram करने की जरूरत नहीं है। बॉक्स में टिक की चेक/अनचेक और ड्राइंग एंड्रॉइड द्वारा की जाती है। एक बार जब आप जानते हैं कि कौन सा चुना गया था, तो आपको केवल चेक स्थिति प्राप्त करने की आवश्यकता है। तो onCheckedChanged जहां तक ​​मैं देख सकता हूं कार्यान्वयन आवश्यक नहीं है।

    +1

    +1 अच्छा जवाब है क्योंकि यह सही है ... लेकिन एंड्रॉइड ने गलत फैसला किया है! इसका बेवकूफ और असंगत ... अन्य घटक कोड (प्रगति पट्टी, या कम से कम श्रोता में ले जाया जाता है) के माध्यम से मूल्य परिवर्तनों की भरपाई करते हैं, स्पिनर जैसे अन्य घटक, इटैम चयन किए गए कॉलबैक भी चयनित नोड का चयन करने के लिए क्षतिपूर्ति करते हैं। – TacB0sS

    13

    ऑनचिक चेंजलिस्टर को ऑनक्लिक लिस्टनर पर बदलें।

    चेक चेंज को दो बार बुलाया जाएगा क्योंकि जब आप सेट चेक() विधि को कॉल करते हैं और जब आप चेकबॉक्स पर क्लिक करते हैं तो इसे कॉल किया जाएगा।

    +0

    यह बेहतर सलाह है !! – TacB0sS

    +2

    लेकिन यदि आप क्लिक के बिना चेक स्थिति बदलते हैं, जैसे कि साधारण छोटे ड्रैग के साथ, इसे नहीं कहा जाएगा। आप स्वयं की जांच कर सकते हैं। –

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