Mr. Mike
Mr. Mike

Reputation: 453

Android ListView Show Wrong Position

I have a problem with ListView. Here the code of adapter :

public class AdapterListViewEncyclopedia extends ArrayAdapter<Apple> {

    private int layoutResourceId;
    private Context context;
    private List<Apple> data;
    private CellHolder holder;

    public AdapterListViewEncyclopedia(Context context, int layoutResourceId, List<Apple> data) {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }


    static class CellHolder
    {
        ImageView imageApple;
        TextView tvCellAppleName;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent)
    {
        View row = convertView;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new CellHolder();
            holder.imageApple = (ImageView) row.findViewById(R.id.imageApple);
            holder.tvCellAppleName = (TextView)row.findViewById(R.id.tvAppleName);

            ImageLoader imageLoader = ImageLoader.getInstance();
            imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position).getImageURL(), holder.imageApple);


            holder.tvCellAppleName.setText(data.get(position).getName());
            System.out.println(position);
            row.setTag(holder);
        }
        else
        {
            holder = (CellHolder)row.getTag();
        }

        return row;
    }

}

The Main Problem :

1.I have 10 data in ArrayAdapter<Apple> and When i open page with ListView and i print position code with System.out.println, the code show 0,1,2,3,4,5,0 2. When i scroll the ListView , Top and Bottom which hidden is random position.

Anyone can help me to solve my problem?

Upvotes: 0

Views: 1631

Answers (1)

Nithinlal
Nithinlal

Reputation: 5061

I have update the code pls try this. You have to set the data after the if-else block other wise you cannot get the correct position in the listview while binding the data. Please refer the android view holder properties ViewHolder

public class AdapterListViewEncyclopedia extends ArrayAdapter<Apple> {

private int layoutResourceId;
private Context context;
private List<Apple> data;
private CellHolder holder;

public AdapterListViewEncyclopedia(Context context, int layoutResourceId, List<Apple> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}


static class CellHolder
{
    ImageView imageApple;
    TextView tvCellAppleName;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent)
{
    View row = convertView;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new CellHolder();
        holder.imageApple = (ImageView) row.findViewById(R.id.imageApple);
        holder.tvCellAppleName = (TextView)row.findViewById(R.id.tvAppleName);
        row.setTag(holder);
    }
    else
    {
        holder = (CellHolder)row.getTag();
    }
    // you can set the data here 
    setData(position,holder);

    return row;
}
private void setData(int position, CellHolder holder)
{
    ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.displayImage(InterfaceConfig.serverURL+data.get(position).getImageURL(), holder.imageApple);

    holder.tvCellAppleName.setText(data.get(position).getName());
}
}

Upvotes: 2

Related Questions