我的自定義列表適配器出現問題。 我的主要活動由ListView,Button和EditText字段組成。 當用戶在EditText字段中輸入內容時,按下按鈕。文本應該 出現在ListView中。對於ListView,我製作了一個自定義適配器。目前只包含一個TextView,但我稍後會添加更多內容,因此我無法使用標準適配器。添加新的時,自定義適配器會替換舊的項目
問題是,當用戶鍵入東西,並按下按鈕時,該字符串被放置在ListView中(很棒!),但問題在於當用戶再次按下時,舊文本被替換爲新(該列表有兩個項目,都包含相同的文本)。當用戶添加第三個項目到列表中時,這個項目替換舊的項目,我現在有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();
任何幫助表示讚賞
哇,多數民衆贊成在悲傷。 3天就解決這個問題。非常感謝您的偉大的先生。我仍然不明白爲什麼這會工作,但? message_holder.size() - 1將返回最後一個項目,但發現最後一個項目,我剛剛添加?(最新),爲什麼wouldent這項工作? – tribler
因爲getView將被調用ListView的每個可見索引。該功能的目的是在屏幕刷新時(由於無效,滾動或notifyDataSetChanged)填充該視圖的數據。 –
順便說一句,你的getView函數應該檢查傳入的視圖(convertView)是否爲null。如果非空,你不應該膨脹一個新的,而應該只填寫數據(視圖可以重複使用,應該是爲了提高效率) –