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