Um, sorry, in attempting to simplify the example that I presented to you I didn't manage a full text search and replace. The text for #bindView should have read (and does in the running code)
@Override public void bindView(View view, Context context, Cursor cursor) { final CheckedTextView checkedText = (CheckedTextView) view; final MyCursor myCursor = (MyCursor) cursor; final Long rowId = myCursor.getRowId(); checkedText.setChecked(rowModel.isSelected(rowId)); checkedText.setText(myCursor.getDescription()); checkedText.setTag(rowId); Log.v(TAG, "rowId=" + rowId + " settingChecked=" + rowModel.isSelected(rowId)); } On Aug 14, 11:15 pm, Paul Turchenko <paul.turche...@gmail.com> wrote: > I believe the issue is that you're getting rowId from > rawContactsCursor (bindView method) which stays on the same record. > IMO you should get row id from cursor coming to you in bindView. This > way you'll get rowId for the record you are currently binding. > To be simple, you are binding to the wrong record. > > On Aug 14, 7:50 am, William Ferguson <william.ferguson...@gmail.com> > wrote: > > > I have a ListView that just contains a CheckedTextView. > > I have a very simple CursorAdapter that populates CheckedTextViews. > > When I click on an item, I can see that I am responding to the correct > > row, store the value in my model and the CheckedText gets checked. > > > However, when I scroll down and then back up again, while I see that > > the model contains the correct value (in #bindView), calling > > #setChecked on the CheckedTextView has no effect. Ie All items are > > unchecked. > > > Its gotta be something simple, but I can't see it. Any ideas? > > > public final class SimpleAdapter extends CursorAdapter { > > > private static final String TAG = "SimpleAdapter"; > > > private final LayoutInflater inflater; > > private final RowModel rowModel = new RowModel(); > > > public SimpleAdapter(Activity context, MyCursor cursor) { > > super(context, cursor, true); > > inflater = (LayoutInflater) > > context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); > > } > > > @Override > > public View newView(Context context, Cursor cursor, ViewGroup > > parent) { > > final CheckedTextView checkedText = (CheckedTextView) > > inflater.inflate(android.R.layout.simple_list_item_multiple_choice, > > parent, false); > > > final MyCursor myCursor = (MyCursor) cursor; > > checkedText.setText(myCursor.getDescription()); > > > final Long rowId = rawContactsCursor.getRowId(); > > checkedText.setChecked(rowModel.isSelected(rowId)); > > Log.v(TAG, "rowId=" + rowId + " settingChecked=" + > > rowModel.isSelected(rowId)); > > > checkedText.setTag(rowId); > > > checkedText.setOnClickListener(new View.OnClickListener() { > > public void onClick(View view) { // Toggle whether the Row > > is selected or not. > > final Long id = (Long) view.getTag(); > > Log.v(TAG, "toggling rowId=" + rowId); > > final boolean checked = rowModel.toggleSelected(id); > > final CheckedTextView checkedTextView = > > (CheckedTextView) view; > > checkedTextView.setChecked(checked); > > } > > }); > > > return checkedText; > > } > > > @Override > > public void bindView(View view, Context context, Cursor cursor) { > > final CheckedTextView checkedText = (CheckedTextView) view; > > > final MyCursor myCursor = (MyCursor) cursor; > > checkedText.setText(myCursor.getDescription()); > > > final Long rowId = rawContactsCursor.getRowId(); > > checkedText.setChecked(rowModel.isSelected(rowId)); > > Log.v(TAG, "rowId=" + rowId + " settingChecked=" + > > rowModel.isSelected(rowId)); > > > checkedText.setTag(rowId); > > } > > > } -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en