0

私はここで本当に混乱しています。アクティビティの作成時に 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;
    }
}
4

1 に答える 1

2

手にリサイクルされたビュー(この行が使用された場所からビューが非表示になっている可能性があるビュー)を使用できることを考慮する必要があります。したがって、次のようになります。

if (!object.isResultAvalible()) {
    viewHolder.attachment.setVisibility(View.GONE);
} else {
    // revert the image status to the default
    viewHolder.attachment.setVisibility(View.VISIBLE);
}
于 2012-11-27T10:28:56.817 に答える