カスタムArrayAdapterを実装しましたが、すべて正常に機能しているようですが、アダプターに新しいアイテムを追加してリストをスクロールすると、最初のTextViewを除いてテキストビュー内のテキストが変更されるようです。
ViewHolderパターンも使用しましたが、まだ正しく機能していません。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
if (view == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.subject_row, null);
holder = new ViewHolder();
holder.subjectName = (TextView) view.findViewById(R.id.subject_name);
holder.task1 = (TextView) view.findViewById(R.id.tasks1);
holder.task2 = (TextView) view.findViewById(R.id.tasks2);
holder.task3 = (TextView) view.findViewById(R.id.tasks3);
holder.time = (TextView) view.findViewById(R.id.time);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
Subject subject = getItem(position);
ArrayList<Task> tasks = subject.getTasks();
int numTask = tasks.size();
holder.subjectName.setText(subject.getSubjectName());
holder.time.setText(subject.getHours() + " hrs " + subject.getMins() + " mins");
switch (numTask) {
case 0: {
holder.task1.setVisibility(View.GONE);
holder.task2.setVisibility(View.GONE);
holder.task3.setVisibility(View.GONE);
break;
}
case 1: {
holder.task1.setText(tasks.get(0).getDescription());
holder.task2.setVisibility(View.GONE);
holder.task3.setVisibility(View.GONE);
break;
}
case 2: {
holder.task1.setText(tasks.get(0).getDescription());
holder.task2.setText(tasks.get(1).getDescription());
holder.task3.setVisibility(View.GONE);
break;
}
case 3: {
holder.task1.setText(tasks.get(0).getDescription());
holder.task2.setText(tasks.get(1).getDescription());
holder.task3.setText(tasks.get(2).getDescription());
break;
}
}
return view;
}
件名名の最初のテキストビューは変更されていないように見えますが、他の3つのテキストビュー'()内のデータも他の行のデータを示しています。
データが空白の場合はビューを非表示にすることと関係があるかもしれませんが、switchステートメントを削除しても同じ結果が得られます。
ありがとう。