ArrayAdapter在滚动时丢失了一些信息

时间:2012-11-27 10:19:00

标签: android android-arrayadapter

我在这里真的很困惑。我在创建活动时填充了一次ArrayAdapter。 它充满了简单的物体。在对象的参数中有一个布尔值,我在适配器的getView()方法上使用它。这是有关部分:

MedicalExamination object = getItem(position); //object is acquired at the begining of getView()

if (!object.isResultAvalible()) 
  viewHolder.attachment.setVisibility(View.GONE);

当我多次上下滚动列表时,resultAvalible布尔值开始改变(?!)。没有关于对象的其他信息发生变化,我在那里保留了几个字符串,我在列表单元格中的TextViews上显示了这些字符串。列表保持原样...除了这个布尔参数更改并使我的ImageView(附件)消失。

我的bollean param是私人的,甚至没有一套方法。唯一的方法是它的组合在构造函数中。

我不知道发生了什么,请在此方面提供一些帮助。

由于请求我的自定义适配器代码:

private class ExaminationsAdapter extends ArrayAdapter<MedicalExamination> {
    private int resource;

    public ExaminationsAdapter(Context context,
            List<MedicalExamination> objects) {
        super(context, R.layout.examinations_list_item, objects);
        resource = R.layout.examinations_list_item;
    }

    class ViewHolder {
        public TextView examinationsNames;
        public TextView date;
        public ImageView attachment;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        ViewHolder viewHolder;
        MedicalExamination object = getItem(position);

        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(resource, null, true);
            viewHolder = new ViewHolder();
            viewHolder.examinationsNames = (TextView) view.findViewById(R.id.examinations_item_title);
            viewHolder.date = (TextView) view.findViewById(R.id.examinations_item_date);
            viewHolder.attachment = (ImageView) view.findViewById(R.id.examinations_item_attachment);

            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }

        if (object == null) {
            return view;
        }

        viewHolder.examinationsNames.setText(object.getExaminationsNames());
        viewHolder.date.setText(object.getDate());

        if (!object.isResultAvalible()) 
            viewHolder.attachment.setVisibility(View.GONE);

        setOnListTouchListener(view);
        return view;
    }
}

1 个答案:

答案 0 :(得分:2)

你需要考虑到你手上可以有一个可回收的视图(一个视图可能隐藏在使用该行的位置),所以:

if (!object.isResultAvalible()) {
    viewHolder.attachment.setVisibility(View.GONE);
} else {
    // revert the image status to the default
    viewHolder.attachment.setVisibility(View.VISIBLE);
}