2014-06-15 22 views
0

我的自定義列表適配器出現問題。 我的主要活動由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(); 

任何幫助表示讚賞

回答

1

您的getview在.get函數中使用大小,因此它總是將數組中最後一個字符串作爲文本返回。它應該使用傳入呼叫的​​位置。

+0

哇,多數民衆贊成在悲傷。 3天就解決這個問題。非常感謝您的偉大的先生。我仍然不明白爲什麼這會工作,但? message_holder.size() - 1將返回最後一個項目,但發現最後一個項目,我剛剛添加?(最新),爲什麼wouldent這項工作? – tribler

+0

因爲getView將被調用ListView的每個可見索引。該功能的目的是在屏幕刷新時(由於無效,滾動或notifyDataSetChanged)填充該視圖的數據。 –

+0

順便說一句,你的getView函數應該檢查傳入的視圖(convertView)是否爲null。如果非空,你不應該膨脹一個新的,而應該只填寫數據(視圖可以重複使用,應該是爲了提高效率) –

0

嘗試改變

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

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

因爲position將取代視圖對項目位置,即。在第一個項目上,將顯示第一個適配器位置的txtTitle。第二個列表項中將顯示第二個適配器視圖,依此類推。

+0

非常感謝你好先生: ) – tribler

+0

@ user3741818樂於助人,享受編碼。 –

相關問題