2016-12-25 12 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はArrayAdapter<Apple>で10のデータを持っていると私はListViewでページを開くと、私はSystem.out.printlnとの位置コード、コードのショー0を印刷するとき、1,2,3,4,5,0 2.私がListViewをスクロールすると、隠されているトップとボトムはランダムな位置になります。

誰かが私の問題を解決するのに役立つでしょうか?

+1

あなたのコードを読む を参照してください?もしも... – Selvin

+1

私はなぜその人たちが悪名高いビューホルダーを使っているのか分かりません。 – pskink

+0

@selvin:申し訳ありませんが、私はすでにコードを更新しました。 – Michael

答えて

1

私はこのコードを試してみてください。 if-elseブロックの後にデータを設定する必要があります。それ以外の場合は、データをバインドするときにリストビューで正しい位置を取得できません。あなたがテキストを設定している場合...アンドロイドビューホルダーのプロパティ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の画像を更新するときに少し遅れても動作します。ありがとう。 – Michael

+0

グライドを使用して画像を読み込むよりも速く画像ローダー – Nithinlal

+0

あなたの提案をありがとう。 – Michael

関連する問題