0

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

谢谢。

4

3 回答 3

1

您没有使隐藏的视图再次可见,例如:

case 1: {
    holder.task1.setVisibility(View.VISIBLE); // Add these!
    holder.task1.setText(tasks.get(0).getDescription());
    holder.task2.setVisibility(View.GONE);
    holder.task3.setVisibility(View.GONE);
    break;
}
于 2013-02-01T21:26:03.780 回答
0

下面的帖子对添加动态内容和保留状态有明确的解释。希望能帮助到你。

http://sgandroiddev.blogspot.com/2013/02/custom-listview.html

于 2013-02-01T21:32:07.187 回答
0

我认为您必须将持有人“写回”到视图中。

view.setTag(holder);

但我不明白你为什么使用持有人类。我想,你不需要这个!只需使用

TextView subjectName = view.findViewById(R.id.subjectName);
subjectName.setText(...);
于 2013-02-01T21:07:51.713 回答