You are not handling row recycling properly. You have the if (row==null) case, but you do nothing in the other case. You need to bind your row widgets with the proper data in either case -- the only difference between the two is that if (row==null), you have to create a row, either directly via inflation or via chaining to the superclass.
On Sun, Feb 6, 2011 at 11:39 AM, Dirk Vranckaert <dirkvrancka...@gmail.com> wrote: > Hi all, > > I'm having an issue with the ListView in Android. > > So I have an activity extending the ListActivity, in the activity I > have an innerclass for my adapater. > Now both on my device and the emulator some entries appear 2 or 3 > times in the list (not always the same items) although the size of my > List<Label> is always the same! > > On the emulator I noticed that it's mostly related to the scrolling in > the list... If I scroll down some entries are duplicate, if I scroll > up and down again the entries have changed all over the list... > > Is there anything in my code that you guys can see that is wrong? > > Here's my code: > > .... > this.labels = labelService.findAll(); > Collections.sort(this.labels, new LabelByNameComparator()); > Log.d(LOG_TAG, labels.size() + " labels loaded!"); > ManageLabelsListAdapter adapter = new > ManageLabelsListAdapter(labels); > adapter.notifyDataSetChanged(); > setListAdapter(adapter); > > /** > * The list adapater private inner-class used to display the > manage labels list. > */ > private class ManageLabelsListAdapter extends ArrayAdapter<Label> > { > private final String LOG_TAG = > ManageLabelsListAdapter.class.getSimpleName(); > /** > * {@inheritDoc} > */ > public ManageLabelsListAdapter(List<Label> labels) { > super(ManageLabelsActivity.this, > R.layout.list_item_labels, labels); > Log.d(LOG_TAG, "Creating the manage labels list > adapater"); > } > > @Override > public View getView(int position, View convertView, ViewGroup > parent) { > Log.d(LOG_TAG, "Getting view..."); > View row = convertView; > ManageLabelsListWrapper wrapper; > > if(row == null) { > Log.d(LOG_TAG, "Row needs to be created!"); > final Label label = labels.get(position); > Log.d(LOG_TAG, "Label at list position " + position + > " retrieved from DB list: " + label); > > LayoutInflater inflater = getLayoutInflater(); > row = inflater.inflate(R.layout.list_item_labels, > parent, false); > Log.d(LOG_TAG, "Label row inflated into layout!"); > wrapper = new ManageLabelsListWrapper(row); > Log.d(LOG_TAG, "Row wrapped!"); > > TextView labelName = wrapper.getLabelname_listitem(); > Log.d(LOG_TAG, "About to update the name of the label > in the view for TextView " + labelName + " with the value: " + > label.getName()); > labelName.setText(label.getName()); > > ImageView deleteButton = wrapper.getBtn_delete(); > deleteButton.setOnClickListener(new > View.OnClickListener() { > public void onClick(View view) { > deleteLabel(label, true); > } > }); > } > > return row; > } > } > > -- > 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 > -- Mark Murphy (a Commons Guy) http://commonsware.com | http://github.com/commonsguy http://commonsware.com/blog | http://twitter.com/commonsguy Warescription: Three Android Books, Plus Updates, One Low Price! -- 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