मेरे पास एक समान परिदृश्य था और इस मुद्दे को हल करने के लिए boolean
फ़ील्ड के साथ एक कस्टम ग्रिड आइटम बना रहा था ताकि यह पता चल सके कि आइटम का चयन किया गया है या नहीं और फिर कस्टम एडाप्टर के माध्यम से आइटम को उचित रूप से हाइलाइट करना है। नीचे मैंने जो किया है उसकी एक मोटा रूपरेखा है:
(1) मैंने boolean
फ़ील्ड के साथ एक कस्टम ग्रिड आइटम बनाया है, जिसे हम सादगी के लिए selectedStatus
पर कॉल करेंगे। मैं भी चयनित स्थिति पाने के लिए मेरी ग्रिड आइटम वर्ग के लिए इसी तरीकों कहा:
public boolean getSelectedStatus()
{
return selectedStatus;
}
public void setSelectedStatus (boolean paramSelectedStatus)
{
this.selectedStatus = paramSelectedStatus;
}
(2) मैं तो एक कस्टम Adapter
कि extends
BaseAdapter
मैं बनाए गए कस्टम ग्रिड वस्तु को संभालने के लिए बनाया। इस Adapter
में मैं जाँच ग्रिड वस्तु के चयनित स्थिति true
या false
है और उसके अनुसार आइटम को हाइलाइट करता है, तो नीचे दिखाई गईं,
@Override
public View getView (final int position, View convertView, ViewGroup parent)
{
// rest of getView() code...
if (!yourGridObject.getSelectedStatus())
{
convertView.setBackgroundColor(Color.TRANSPARENT);
}
else
{
convertView.setBackgroundColor(Color.LTGRAY);
}
// rest of getView() code...
return convertView;
}
(3) अंत में, आप onItemClickListener
चयनित स्थिति निर्धारित करने के लिए जोड़ सकते हैं और ग्रिड आइटम की पृष्ठभूमि का रंग जब वे चुने गए हैं (क्लिक किया):
yourGridView.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id)
{
YourGridObject yourGridObject = (YourGridObject) parent.getItemAtPosition(position);
if (!yourGridObject.getSelected())
{
view.setBackgroundColor(Color.LTGRAY);
yourGridObject.setSelected(true);
}
else
{
view.setBackgroundColor(Color.TRANSPARENT);
yourGridObject.setSelected(false);
}
}
});
चयन को लागू इस तरह से सुनिश्चित करता है कि ग्रिड मदों की हाइलाइटिंग (चयन) में परिवर्तन नहीं होगा स्तंभों और पंक्तियों की संख्या चयन के बाद से स्वैप करें स्थिति ग्रिड के भीतर निहित है खुद वस्तुओं।
आप पोर्ट्रेट और लैंडस्केप मोड के लिए कॉलम नंबर को कैसे परिभाषित कर रहे हैं? –
@ हार्डिक चौहान मैं लेआउट एक्सएमएल में ग्रिडव्यू के न्यूकॉलमर्स विशेषता का उपयोग कर रहा हूं और संख्या मेरी-प्लेआउट-भूमि संसाधन निर्देशिका में 3 और डिफ़ॉल्ट लेआउट संसाधन निर्देशिका में 2 के रूप में एक dimen मान है। – joepetrakovich
ठीक है मुझे समाधान मिल गया है और आपको बताएं। –