android - ListView 项目在滚动时随机排列

标签 android listview

我的适配器中有以下代码。每个项目由两个图像组成,在它们下面每个图像都有一个复选框。我想显示这些项目的列表,但是当我上下滚动时,第一个和最后一个项目似乎是相同的。过了一段时间,其他元素也会出现故障。我查看了有关此问题的其他问题,但无法找到为什么我的 ListView 项目在向下和向上滚动后会随机排列。

@Override
public View getView(final int position, View convertView, ViewGroup parent){
    View view = convertView;
    if(view == null){
        viewHolder = new ViewHolder();
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = inflater.inflate(R.layout.wheel_list_item, null);

        viewHolder.decisionNum = (TextView)view.findViewById(R.id.decisionNumText);
        viewHolder.leftWheel = (ImageView)view.findViewById(R.id.leftWheel);
        viewHolder.rightWheel = (ImageView)view.findViewById(R.id.rightWheel);
        viewHolder.leftCheckBox = (CheckBox)view.findViewById(R.id.leftCheckBox);
        viewHolder.rightCheckBox = (CheckBox)view.findViewById(R.id.rightCheckBox);
        viewHolder.wheelTuple = list.get(position);
        view.setTag(viewHolder);
    }
    else{
        viewHolder = (ViewHolder)view.getTag();
    }

    viewHolder.decisionNum.setText(Integer.toString(position + 1));

    viewHolder.leftCheckBox.setClickable(false);
    viewHolder.rightCheckBox.setClickable(false);

    viewHolder.leftWheel.setImageBitmap(new WheelView(context, viewHolder.wheelTuple.left).getBitmapReduced());
    viewHolder.rightWheel.setImageBitmap(new WheelView(context, viewHolder.wheelTuple.right).getBitmapReduced());

    int id = context.getResources().getIdentifier("GREY", "color", context.getPackageName());
    int colorId=context.getResources().getColor(id);

    if(!viewHolder.wheelTuple.left.isChosen()){
        viewHolder.leftWheel.setColorFilter(colorId, PorterDuff.Mode.MULTIPLY);
        viewHolder.rightCheckBox.setChecked(true);
    }
    else{
        viewHolder.rightWheel.setColorFilter(colorId, PorterDuff.Mode.MULTIPLY);
        viewHolder.leftCheckBox.setChecked(true);
    }

    return view;
}

static class ViewHolder{
    TextView decisionNum;
    ImageView leftWheel;
    ImageView rightWheel;
    CheckBox leftCheckBox;
    CheckBox rightCheckBox;
    WheelListActivity.WheelTuple wheelTuple;
}

最佳答案

您必须使用以下两个函数,

@Override
    public int getViewTypeCount() {
        if(searchList.size()==0){
            return 1;
        }
        return searchList.size();
    }

    @Override
    public int getItemViewType(int position) {
        return position;
    }

如果你的 dataArrayList 的大小为 0,那么请记住从 getViewTypeCount() 返回 1,否则你将得到 ArrayIndexOutOfBoundsException。请引用上面的代码示例。

关于android - ListView 项目在滚动时随机排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36076803/

相关文章:

android - SimpleCursorAdapter 不会填充我的 ListView,没有错误,只是什么也没发生

iphone - HTML5 网络应用与原生移动应用

android模拟重启

android - 如何获取从 ListView 中选中的选中项目?

listview - Flutter:编辑我的文本字段时键盘立即消失

android - 如何在警报对话框中将图像显示为消息?

java - Android:从mysql检索数据

android - 将静态数据预加载和维护到 Android 中的 SQLite 实例的最佳选择是什么?

android - 位图内存不足问题

java - 即使使用 -keep,kotlin 类的构造函数中的参数名称也会被 proguard 删除