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

Reply via email to