> 1) I don't see anyway to configure choiceMode for a CHeckedTxtView
> iether programatically or via the layout file.

choiceMode is set on ListView, not on the CheckedTextView. For
instance: 
http://d.android.com/reference/android/widget/ListView.html#setItemChecked(int,
boolean)

> 2) I most definitely DO need to call #setChecked in #bindView because
> otherwise the CheckedTextViews remain checked even even after the
> cursor for the ListAdapter has been changed (which is possible in this
> scenario via user choice). If you have a single cursor feeding your
> ListAdapter you'll never notice it, but as soon as you switch between
> different lists of data (and have some memory of user selection on
> that data) you have to be able to set the checked value on the
> CheckedTextView based upon the row and rowModel.

Use ListView's various choiceMode related methods to do this. You can

>
>
> On Aug 16, 6:22 am, Romain Guy <[email protected]> wrote:
>> Actually you want to use CheckedTextView with choiceMode. That's what
>> CheckedTextView is for. However, you should not be calling setChecked
>> from bindView(), but let ListView handle it. The problem was that you
>> were doing ListView's job a second time. You don't need listeners
>> (click on onlistitem), calls to setChecked, etc.
>>
>> On Sun, Aug 15, 2010 at 4:15 AM, William Ferguson
>>
>>
>>
>> <[email protected]> wrote:
>> > To those who may follow, if you have a list of CheckedTextView you
>> > probably don't want the ListView to have any choice mode. Ie don't
>> > set:
>> >   listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
>>
>> > And then you will be able to handle the checked state in your
>> > ListAdapter and wou will also not get #bindView fired a ridiculous
>> > number of times.
>>
>> > On Aug 15, 5:26 pm, William Ferguson <[email protected]>
>> > wrote:
>> >> OK, further info.
>>
>> >> As could be seen from #newView, I was handling the onClick on the
>> >> CheckedTextView myself and this was because I was using a normal
>> >> Activity instead of a ListActivity.
>> >> When I switched to a ListActivity, implemented
>> >> ListActivity#onListItemClick and ditched the OnClickListener code
>> >> above I noticed 2 things.
>> >> 1) The CheckedText started staying checked even after scrolling (ie it
>> >> starting to behave as expected).
>> >> 2) Every time I toggle a list item, #bindView is being called once for
>> >> each visible item.
>>
>> >> Its great that this has made it started working. But
>> >> a) I don't understand why it wasn't working before
>> >> b) 2 from above seems pretty wasteful. Why should #bindView be called
>> >> from all visible items just because one item has been checked/
>> >> unchecked?
>>
>> >> On Aug 15, 4:29 pm, William Ferguson <[email protected]>
>> >> wrote:
>>
>> >> > 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 <[email protected]> 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 <[email protected]>
>> >> > > 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 [email protected]
>> > To unsubscribe from this group, send email to
>> > [email protected]
>> > For more options, visit this group at
>> >http://groups.google.com/group/android-developers?hl=en
>>
>> --
>> Romain Guy
>> Android framework engineer
>> [email protected]
>>
>> Note: please don't send private questions to me, as I don't have time
>> to provide private support.  All such questions should be posted on
>> public forums, where I and others can see and answer them
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Romain Guy
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time
to provide private support.  All such questions should be posted on
public forums, where I and others can see and answer them

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to