私はここで本当に混乱しています。アクティビティの作成時に ArrayAdapter を一度埋めました。シンプルなオブジェクトでいっぱいです。オブジェクトのパラメーターの中には、アダプターの getView() メソッドで使用するブール値が 1 つあります。これは関連する部分です:
MedicalExamination object = getItem(position); //object is acquired at the begining of getView()
if (!object.isResultAvalible())
viewHolder.attachment.setVisibility(View.GONE);
リストを数回上下にスクロールすると、resultAvalible ブール値が変化し始めます (?!)。オブジェクトの変更に関する他の情報はありません。リスト セルの TextViews に表示する文字列をいくつか保持します。リストはそのままです...このブール値のパラメーターに加えて、変更されてImageView(添付ファイル)が消えます。
私のボリアンパラメータはプライベートです。そのための set メソッドさえありません。そのビーイングセットがコンストラクターにある唯一の方法。
何が起こっているのかわかりません。助けが必要です。
リクエストによる私のカスタムアダプターコード:
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;
}
}