我的自定义列表适配器有问题。 我的主要活动包括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();
感谢任何帮助
答案 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上,将显示第二个适配器视图,依此类推。