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

Reply via email to