2016-12-25 93 views
-1

我遇到问题ListView。适配器的下面的代码:Android 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.I有10个数据ArrayAdapter<Apple>,当我打开网页,ListView和我打印位置代码System.out.println,代码显示0 ,1,2,3,4,5,0 2.当我滚动ListView,顶部和底部隐藏是随机的位置。

任何人都可以帮我解决我的问题吗?

+1

阅读代码...当您设置文本?只有... – Selvin

+1

我也不知道为什么这些人使用那个臭名昭着的视图持有人......它给与它的问题相比有多少帮助? – pskink

+0

@selvin:对不起,我已经更新了代码。 – Michael

回答

1

我已更新代码请尝试此操作。您必须在if-else块之后设置数据,否则在绑定数据时无法在列表视图中获得正确的位置。请参阅Android视图持有者属性 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()); 
} 
} 
+0

它与小滞后看到自己时,更新的ListView中的图像。 btw谢谢。 – Michael

+0

利用滑行来加载图像比它的图像加载器 – Nithinlal

+0

快谢谢您的建议。 – Michael