我发现了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);
}
}
答案 0 :(得分:0)
使用RecyclerView
代替ListView
并在您的适配器扩展RecyclerView.Adapter
中,这将有效。例如
public class YourAdapterName extends
RecyclerView.Adapter<YourAdapterName.MyViewHolder> {
}