viewholder导致第一个视图项错误显示,一些视图溅起

时间:2016-02-28 08:19:49

标签: android baseadapter

我发现了Android BaseAdapter viewHolder的问题。像这样:我使用viewholder总是导致第一个视图项错误显示。就像第一个项目视图飞溅或一些视图飞溅。 大多数此问题都是在低操作系统Android设备中引起的。 我不知道为什么。但我停止使用viewHolder修复问题 为什么呢?

public class TreasureBoxAdapter extends BaseTreasureBoxAdapter {
private static final String TAG = "TreasureBoxAdapter";
private static final boolean DEBUG = FeatureConfig.DEBUG_LOG;

private final AbsListView.LayoutParams param;
private final int mViewHolderHeight;

public TreasureBoxAdapter(Context context, List<?> items, int columnCount, int mScreenWidth) {
    super(context, items, columnCount);
    mViewHolderHeight = mScreenWidth / context.getResources().getInteger(R.integer.column_count);
    param = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            mScreenWidth / context.getResources().getInteger(R.integer.column_count));
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
      if (convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.treasure_box_grid_item, null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
      } else {
          holder = (ViewHolder) convertView.getTag();
      }
    holder.build(position);

    holder.item.setLayoutParams(param);
    return convertView;
}

public class ViewHolder extends TreasureViewHolder{

    public ViewHolder(View view) {
        item = (LinearLayout) view.findViewById(R.id.treasure_item);
        title = (TextView) view.findViewById(R.id.item_title);
        image = (ImageView) view.findViewById(R.id.item_img);
        remind = new RemindView(getContext(), image);
    }

    @Override
    public void build(int pos) {
        TreasureBean item = (TreasureBean) getItem(pos);
        item.buildView(getContext(), this, pos);
    }
}

1 个答案:

答案 0 :(得分:0)

使用RecyclerView代替ListView并在您的适配器扩展RecyclerView.Adapter中,这将有效。例如

public class YourAdapterName extends         
RecyclerView.Adapter<YourAdapterName.MyViewHolder> {
}