简体   繁体   English

Android ListView显示错误的位置

[英]Android ListView Show Wrong Position

I have a problem with ListView . 我对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. 1.我在ArrayAdapter<Apple>有10个数据,当我使用ListView打开页面并使用System.out.println打印位置代码时,代码显示为0,1,2,3,4,5,0 2.当我滚动ListView ,Top和Bottom,其中隐藏的是随机位置。

Anyone can help me to solve my problem? 任何人都可以帮助我解决我的问题吗?

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. 您必须在if-else块之后设置数据,否则在绑定数据时无法在列表视图中获得正确的位置。 Please refer the android view holder properties ViewHolder 请参考android viewholder属性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());
}
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM