Hi, I usually use images for checked and unchecked status checkboxes rather than using actual checkbox widget. because i always failed to use actual checkbox widget in listview facing listitem click issue. I know this may not be useful suggestion to you.
On Sat, Feb 26, 2011 at 7:30 AM, Wall-E <bashee...@gmail.com> wrote: > I have a ListActivity and an ArrayAdapter that contains a list of an > Object for example ArrayAdapter<MyObject>. Now in my ArrayAdapter I > inflate a layout that includes a checkbox. I'm having the issue now > that when I click on the checkboxes it's fine until it scrolls past > the window. Now I know that the adapter recycles views so let me > explain how I have my adapter set up and if anyone could kindly see > what I'm doing wrong: > > I have a ViewHolder class such as the following: > > public class ViewHolder > { > View base; > CheckBox checkbox; > TextView tagTexView; > TextView tagIDTextView; > > public ViewHolder(View base) > { > this.base = base; > } > > CheckBox getTagCheckBox() > { > if(checkbox == null) > { > checkbox = (CheckBox) > base.findViewById(R.id.tagInfoCheckBox); > } > return checkbox; > } > > TextView getTagMainIdentifierTextView() > { > if(tagTexView == null) > { > TwoLineListItem twoListItem = > (TwoLineListItem) > base.findViewById(R.id.taginfo_layoutTwoLineListItem); > tagTexView = (TextView) > twoListItem.getText1(); > } > return tagTexView; > } > > TextView getTagIDTextView() > { > if(tagIDTextView == null) > { > TwoLineListItem twoListItem = > (TwoLineListItem) > base.findViewById(R.id.taginfo_layoutTwoLineListItem); > tagIDTextView = (TextView) > twoListItem.getText2(); > } > return tagIDTextView; > } > } > > Now in my getView method, I inflate convertView and create the > viewHolder if convertView is null or set the view holder if it's not > (holder = (ViewHolder) convertView.getTag()). > > After that, I set all the values of the views by accessing the views > using the holder, for example: > > holder.getTagCheckBox().setChecked(tag.plot); > > where tag is MyObject that I get using getItem(position) inside my > getView and tag.plot is the boolean value that will indicate if the > checkbox should be checked or not. > > I also created a OnCheckedChangeListener that just sets to tag.plot to > whatever the checked state is and then call notifyDataSetChanged(); > > So the text that I update in my views works just fine but the checkbox > seems to get screwed up and although I've read a few suggestions, none > of them have worked. > > @Override > public View getView(final int position, View convertView, ViewGroup > parent) > { > mInflater = LayoutInflater.from(context); > > final MyObject tag = this.getItem(position); > > // A ViewHolder keeps references to children views to avoid > // unneccessary calls to findViewById() on each row. > ViewHolder holder; > > // When convertView is not null, we can reuse it directly, > there is > // no need to reinflate it. We only inflate a new View when > the > convertView > // supplied by ListView is null. > if (convertView == null) > { > convertView = > mInflater.inflate(R.layout.taginfo_layout, null); > > // Creates a ViewHolder and store references to the > two children > // views we want to bind data to. > holder = new ViewHolder(convertView); > > convertView.setTag(holder); > } > else > { > // Get the ViewHolder back to get fast access to the > TextView > // and the ImageView. > holder = (ViewHolder) convertView.getTag(); > } > > // Set the checkbox value to the value of tag.plot > holder.getTagCheckBox().setChecked(tag.plot); > holder.getTagCheckBox().setOnCheckedChangeListener(new > android.widget.CompoundButton.OnCheckedChangeListener() > { > @Override > public void onCheckedChanged(CompoundButton > buttonView, > boolean isChecked) > { > tag.plot = isChecked; > notifyDataSetChanged(); > } > > }); > > // just for testing I print out the position of the > view > holder.getTagMainIdentifierTextView().setText("Position: " + > position); > > holder.getTagIDTextView().setText("Tag ID: " + tagid); > > return convertView; > } > > If anyone could find what my mistake is in terms of handling the > checkbox, I would greatly appreciate it. Also let me know if I need > to post more code. > > -- > 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 -- 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