मैं एक कस्टम Listview
बनाया सूचीदृश्य में प्रत्येक आइटम के साथ एक निम्नलिखित लेआउटफोर्स सूची दृश्य दृश्य (चेकबॉक्स)
contactlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" android:weightSum="1">
<CheckBox android:id="@+id/checkBox1" android:text="CheckBox" android:layout_width="134dp" android:layout_height="108dp" android:focusable="false"></CheckBox>
<LinearLayout android:id="@+id/linearLayout1" android:layout_height="match_parent" android:orientation="vertical" android:layout_width="87dp" android:layout_weight="0.84" android:weightSum="1" >
<TextView android:text="TextView" android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/name" android:layout_weight="0.03"></TextView>
<TextView android:text="TextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/phone"></TextView>
<TextView android:text="TextView" android:layout_height="wrap_content" android:layout_weight="0.03" android:layout_width="match_parent" android:id="@+id/contactid" android:visibility="invisible"></TextView>
</LinearLayout>
</LinearLayout>
मैं होने (getView()
विधि अधिभावी के बिना) का पुनः उपयोग न एक निम्नलिखित तरीके से एक SimpleCursorAdapter
का उपयोग कर Listview
पॉप्युलेट हूँ ...
Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
String from[] = new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
int to[] = new int[]{R.id.name,R.id.phone,R.id.contactid};
SimpleCursorAdapter s = new SimpleCursorAdapter(this,R.layout.contactlayout,c,from,to);
lv.setAdapter(s);
एक बटन के क्लिक पर मैं सभी चेकबॉक्स के राज्य पढ़ रहा हूं। समस्या यह है कि, यदि मैं एक CheckBox
चेक करता हूं तो लाइन के नीचे कई अन्य स्वचालित रूप से चेक किए जाते हैं। मुझे पता है कि यह दृश्यों का पुन: उपयोग कर रहा है। मैं इससे कैसे बचूं? मैं इस मामले में getView()
विधि को ओवरराइड नहीं कर रहा हूं, इसलिए मुझे आश्चर्य है कि क्या मैं अभी भी प्राप्त करने के लिए कोई रास्ता है?
उत्तर
अंत में मैं कार्यान्वित क्या @sastraxi सुझाव दिया ...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
final TextView name = (TextView) view.findViewById(R.id.name);
final TextView contactId = (TextView) view.findViewById(R.id.contactid);
final int pos = position;
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(checkBox.isChecked())
{
checkList.add(String.valueOf(pos));
nameList.add(name.getText().toString());
contactList.add(contactId.getText().toString());
Log.i("Chk added",String.valueOf(pos));
}
else
{
checkList.remove(String.valueOf(pos));
nameList.remove(name.getText().toString());
contactList.remove(contactId.getText().toString());
Log.i("Un Chk removed",String.valueOf(pos));
}
}
});
if(checkList.contains(String.valueOf(pos)))
{
checkBox.setChecked(true);
}
else
{
checkBox.setChecked(false);
}
return view;
}
हमने हर उस क्लिक 'ListView' से जुड़ी संचालकों को देख सकते हैं में इन दोनों तरीकों ओवरराइड? – sastraxi
@Sastraxi: 'Listview' में कोई भी श्रोताओं को नहीं जोड़ा है, जब मैं बटन पर क्लिक करता हूं तो मैं बस सभी चेकबॉक्स की स्थिति पढ़ रहा हूं। –
बहुत बहुत धन्यवाद। इसने टॉगल बटन के साथ भी समस्या हल की। – zawhtut