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 <[email protected]> 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 <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en