Dirk,

You have a bug in your getView() method.

When a list item layout gets recycled (convertView != null), your code correctly avoids re-inflating a new layout. However, since the item layout is being recycled, it's also necessary to update its views with values for the current item.

Pseudo-code:

getView() {

if (convertView == null) {
inflate a view
}

/* Always execute below code, for both new and recycled item layouts */

YourDataItem item = get data item specified by "position"

TextView view1.setText(item.name);
TextView view2.setText(item.address);
// etc
}

-- Kostya

06.02.2011 19:39, Dirk Vranckaert пишет:
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;
         }
     }



--
Kostya Vasilyev -- WiFi Manager + pretty widget -- http://kmansoft.wordpress.com

--
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