Ok never mind my last comment. I started to re-write the ArrayAdapter implementation and got it working just fine... :) Thanks for your help!! :)
Here's my update code: /** * 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, "Start rendering/recycling row " + position); View row; final Label label = labels.get(position); Log.d(LOG_TAG, "Got label with name " + label.getName()); if (convertView == null) { Log.d(LOG_TAG, "Render a new line in the list"); row = getLayoutInflater().inflate(R.layout.list_item_labels, parent, false); } else { Log.d(LOG_TAG, "Recycling an existing line in the list"); row = convertView; } Log.d(LOG_TAG, "Ready to update the name of the label of the listitem..."); TextView labelname = (TextView) row.findViewById(R.id.labelname_listitem); labelname.setText(label.getName()); Log.d(LOG_TAG, "Ready to bind the deleteButton to the deleteLabel method..."); ImageView deleteButton = (ImageView) row.findViewById(R.id.btn_delete); deleteButton.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { deleteLabel(label, true); } }); Log.d(LOG_TAG, "Done rendering row " + position); return row; } } On Feb 6, 11:39 pm, Dirk Vranckaert <dirkvrancka...@gmail.com> wrote: > Thx for the help. > > I was trying something like the code snippet below but it doesn't > help... It seems that the TextView retrieved in the else case is > always null, any ideas? > > } else { > Log.d(LOG_TAG, "No need for row to be created"); > Log.d(LOG_TAG, "Finding the TextView for the label- > name"); > TextView textView = (TextView) > row.findViewById(R.id.labelname); > if(textView != null) { > Log.d(LOG_TAG, "TextView for label-name found"); > Log.d(LOG_TAG, "Setting the name of the > label..."); > textView.setText(label.getName()); > ImageView deleteButton = (ImageView) > row.findViewById(R.id.btn_delete); > Log.d(LOG_TAG, "About to attach the > onClickListener for deletion of the label"); > deleteButton.setOnClickListener(new > View.OnClickListener() { > public void onClick(View view) { > deleteLabel(label, true); > } > }); > } > } > > On Feb 6, 5:45 pm, Kostya Vasilyev <kmans...@gmail.com> wrote: > > > > > > > > > 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