Here is my CustomAdapter which extends the BaseAdpater When i run the app i get the error
FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
at com.africacloudspace.apps.mobisms.adapters
This is the custom adapter
public class ContactCustomAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;
private List<ContactModel> contactModels;
boolean[] itemChecked;
public ContactCustomAdapter(Activity activity, List<ContactModel> contactModels) {
this.activity = activity;
this.contactModels = contactModels;
itemChecked = new boolean[contactModels.size()];
}
@Override
public int getCount() {
return contactModels.size();
}
@Override
public Object getItem(int location) {
return contactModels.get(location);
}
@Override
public long getItemId(int position) {
return 0;
}
private int lastPosition = -1;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolderContacts viewHolderContacts;
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.contact_item_model, null);
viewHolderContacts = new ViewHolderContacts();
viewHolderContacts.contact_id = (TextView) convertView.findViewById(R.id.item_contact_id);
viewHolderContacts.contact_fname = (TextView) convertView.findViewById(R.id.item_contact_fname);
viewHolderContacts.contact_lname = (TextView) convertView.findViewById(R.id.item_contact_lname);
viewHolderContacts.contact_number = (TextView) convertView.findViewById(R.id.item_contact_number);
viewHolderContacts.ckbox2 = (CheckBox) convertView.findViewById(R.id.checkbox_contact);
convertView.setTag(viewHolderContacts);
} else {
viewHolderContacts = (ViewHolderContacts) convertView.getTag();
}
ContactModel c = contactModels.get(position);
viewHolderContacts.contact_id.setText(c.getContactId());
viewHolderContacts.contact_fname.setText(c.getFirstName());
viewHolderContacts.contact_lname.setText(c.getLastName());
viewHolderContacts.contact_number.setText(c.getNumber());
viewHolderContacts.ckbox2.setChecked(false);
if (itemChecked[position]) {
viewHolderContacts.ckbox2.setChecked(true);
} else {
viewHolderContacts.ckbox2.setChecked(false);
}
/* animate the list items */
Animation animation = AnimationUtils.loadAnimation(parent.getContext(), (position > lastPosition) ? R.anim.list_up_from_bottom : R.anim.list_down_from_top);
convertView.startAnimation(animation);
lastPosition = position;
return convertView;
}
private class ViewHolderContacts {
TextView contact_id;
TextView contact_fname;
TextView contact_lname;
TextView contact_number;
CheckBox ckbox2;
}
}
When i remove this part from the code
if (itemChecked[position]) {
viewHolderContacts.ckbox2.setChecked(true);
} else {
viewHolderContacts.ckbox2.setChecked(false);
}
The error is gone
i have tried almost everything.. i really need some help
i am trying to implement something like this http://www.androprogrammer.com/2013/10/list-view-with-check-box-using-custom.html but i can't tell what am doing wrong.
here is my ContactModel
public class ContactModel {
public String contactId;
public String firstName;
public String lastName;
public String number;
public String email;
public String location;
public ContactModel() {
super();
}
public void setContactId(String contactId) {
this.contactId = contactId;
}
public String getContactId() {
return contactId;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
public void setNumber(String number) {
this.number = number;
}
public String getNumber() {
return number;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public void setLocation(String location) {
this.location = location;
}
public String getLocation() {
return location;
}
}
There is no need of taking one more boolean
array to maintain the checked staus. You can achieve the same thing by taking one more variable in your ContactModel
as public boolean checked;
Modify this
if (itemChecked[position]) {
viewHolderContacts.ckbox2.setChecked(true);
} else {
viewHolderContacts.ckbox2.setChecked(false);
}
as
ContactModel c = contactModels.get(position);
viewHolderContacts.ckbox2.setChecked(c.checked);
Imeplement list item click listener as follows
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
contactModels.get(position).checked = !contactModels.get(position).checked;
adapter.notifyDataSetChanged();
}
});
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.