我已经实现了一个自定义的 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 语句并仍然得到相同的结果,则可能与隐藏其视图有关。
谢谢。