私のアプリでは、連絡先をリストビューに読み込みます。画像、テキスト、チェックボックスを含むリストビューがあり、カーソルアダプターによって実装されています。私の問題は、リストビューを上下にスクロールすると、その位置が変更されることです。つまり、位置 1、3、4、2 を選択 (チェックボックスにチェックを入れる) し、下にスクロールして上にスクロールすると、チェックされた位置がランダムに変更されます。私は解決策を見つけるためにもっと時間を費やしましたが、それを得ることができませんでした. 私を助けてください。
アダプターの私のコードex:
public class ContactsListAdapter extends CursorAdapter {
ContentResolver cr;
private final LayoutInflater mInflater;
private Context mContext;
@SuppressWarnings("unchecked")
public ContactsListAdapter(Context context, Cursor c,ArrayList<ContactPhoneInfo> selected) {
super(context, c, true);
this.checkedContacts = (ArrayList<ContactPhoneInfo>) selected.clone();
mInflater = LayoutInflater.from(context);
this.mContext = context;
}
public void bindView(View view,Context context_bind, Cursor cursor)
{
final LinearLayout linear = (LinearLayout) view.findViewById(R.id.contacts_linearLayout1);
final TextView contactEntryText = (TextView) view.findViewById(R.id.contacts_txtViewContactName);
final CheckBox chkContact = (CheckBox) view.findViewById(R.id.contacts_chkContact);
final TextView textCaption = (TextView) view.findViewById(R.id.contacts_layoutCaption);
final ImageView photoView = (ImageView)view.findViewById(R.id.contacts_imgViewcontact);
ContentResolver cr = context_bind.getContentResolver();
.......
int id = Integer.parseInt(cursor.getString(0));
final String name = cursor.getString(1);
contactEntryText.setText(name);
.......
view.setClickable(true);
view.setFocusable(true);
view.setOnClickListener(new OnClickListener() {
public void onClick(View v)
{
chkContact.setChecked(!chkContact.isChecked());
}
});
chkContact.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
.buttonView.........
}
});
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final View view = mInflater.inflate(R.layout.contacts_listitem, parent,
false);
return view;
}
}
呼び出しクラスのコーディング:
contactsListAdapter = new ContactsListAdapter(this,app.loadContactCursor(""),checkedContacts);
setListAdapter(contactsListAdapter);