添加新项目时,自定义适配器会替换旧项目

时间:2014-06-15 07:31:46

标签: android listview android-listview adapter

我的自定义列表适配器有问题。 我的主要活动包括ListView,Button和EditText字段。 当用户在EditText字段中输入内容时,按下按钮。文本应该 出现在ListView中。对于ListView,我已经制作了一个自定义适配器。目前只包含一个TextView,但我稍后会添加更多东西,所以我不能使用标准适配器。

问题是,当用户输入内容并按下按钮时,字符串被放置在ListView中,(太棒了!),但问题是当用户再次按下时,旧文本被新文本替换(该列表有2个项目,都包含相同的文本)。当用户将第三个项目添加到列表中时,此项目将替换旧项目,现在我在列表中有3个最新项目?

所以问题是最新的项目取代旧项目了吗?

在我的mainActivity中我有这个:

private ListView list_messages;
private Button send_button;
private TextView input_message;

public Custome_list_item adapter;
public ArrayList<String> message_holder;

message_holder = new ArrayList<String>();
adapter = new Custome_list_item(this,message_holder);
list_messages.setAdapter(adapter);

自定义列表适配器只有一个getView,如下所示:

LayoutInflater inflater = context.getLayoutInflater();

View rowView= inflater.inflate(R.layout.list_row, null, true);

TextView txtTitle = (TextView) rowView.findViewById(R.id.message_in_list_row);
ImageView imageView = (ImageView) rowView.findViewById(R.id.user_profile);
TextView timeView = (TextView) rowView.findViewById(R.id.date_and_time);

txtTitle.setText(message_holder.get(message_holder.size()-1));

//imageView.setImageResource(imageId);
timeView.setText("DD:MM:YY");
return rowView;

当用户点击主要活动中的按钮时,我这样做:

mainActivity.message_holder.add(item);

mainActivity.adapter.notifyDataSetChanged();

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

你的getview在.get函数中使用size,所以它总是会返回数组中的最后一个字符串作为文本。它应该使用传递给调用的位置。

答案 1 :(得分:0)

尝试更改

txtTitle.setText(message_holder.get(message_holder.size()-1));

txtTitle.setText(message_holder.get(position));

因为position会将视图的位置替换为该项目,即。在第一个项目上,将显示第一个适配器位置的txtTitle。在第二个listItem上,将显示第二个适配器视图,依此类推。