【问题标题】:Android ListView Show Wrong PositionAndroid ListView显示错误的位置
【发布时间】:2016-12-25 13:37:56
【问题描述】:

ListView 有问题。这里是适配器的代码:

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;
    }

}

主要问题:

1.我在ArrayAdapter&lt;Apple&gt; 中有 10 个数据,当我用ListView 打开页面并用System.out.println 打印位置代码时,代码显示 0,1,2,3,4,5,0 2.当我滚动ListView时,隐藏的顶部和底部是随机位置。

谁能帮我解决我的问题?

【问题讨论】:

  • 阅读您的代码... 当您设置文本时?仅当...
  • 我也不知道为什么那些人使用那个臭名昭著的视图持有者......与它的问题相比,它提供了多少帮助?
  • @selvin :对不起,我已经更新了代码。
  • @pskink:我以前做过。它运行良好,但在这种情况下,我不知道为什么滚动页面时运行错误。
  • 那么您在哪里/何时致电setText

标签: java android xml listview


【解决方案1】:

我已经更新了代码,请试试这个。您必须在 if-else 块之后设置数据,否则在绑定数据时您无法在列表视图中获得正确的位置。请参考 android view holder 属性 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());
}
}

【讨论】:

  • 更新 ListView 上的图像时几乎没有延迟。顺便说一句,谢谢。
  • 使用 glide 加载图片比 Image loader 快
  • 感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2012-01-18
相关资源
最近更新 更多