2012-05-08 81 views
1

這就是我在頁面加載時看到屏幕的方式。但是當我開始滾動列表時,所有記錄開始改變,變得非常奇怪。我真的不知道爲什麼,有什麼建議?ListView在滾動時更改記錄

Original

這是屏幕後,我通過我的ListView上下滾動。 After scrolling the list

適配器:

private class TechnicalDocumentationAdapter extends 
     ArrayAdapter<TechnicalDocumentation> { 

    private ArrayList<TechnicalDocumentation> items; 

    public TechnicalDocumentationAdapter(Context context, 
      int textViewResourceId, ArrayList<TechnicalDocumentation> items) { 
     super(context, textViewResourceId, items); 
     this.items = items; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.technicaldocumentationrow, null); 
     } 
     TechnicalDocumentation technicalDocumentation = items.get(position); 
     if (technicalDocumentation != null) { 
      TextView tt = (TextView) v.findViewById(R.id.TDRdate); 
      TextView bt = (TextView) v.findViewById(R.id.TDRobjectTypeCode); 
      TextView ct = (TextView) v 
        .findViewById(R.id.TDRperformedAction); 
      TextView at = (TextView) v.findViewById(R.id.TDRobjectName); 

      tt.setText(tt.getText() + "\n " + technicalDocumentation.date); 
      bt.setText(bt.getText() + "\n " 
        + technicalDocumentation.objectTypeCode); 
      ct.setText(ct.getText() + "\n " 
        + technicalDocumentation.performedAction); 
      at.setText(at.getText() + "\n " 
        + technicalDocumentation.objectName); 

     } 
     return v; 
    } 
} 
+0

發佈您的適配器也.. –

回答

3

的Android ListView的再循環的觀點。目前問題在於您的適配器始終將新數據附加到TextView。現在,每次顯示新行時,都會將新行中的數據附加到舊數據中。

要解決這個問題,如果您使用的是convertView參數,則應該從舊數據中清除TextView。爲我工作

+0

我添加了:tt.setText(「」); bt.setText( 「」); at.setText( 「」); bt.setText( 「」);它的工作原理!所以謝謝! – user1264255

+0

在哪裏添加此textview.setTexr(「」);在適配器 您可以編輯您的答案@ user1264255 –

10

事情是這樣的:

View row = convertView; 
ComponentsHolder holder = null; 
**row = null;** // Added this line to fix the problem. 

if (row == null) {...} 

但是這種解決方案所做的導航慢得多。

編輯

這不是正確的解決方案。

要走的路是在分配新值之前清除所有視圖。

if (row == null) { 

LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
row = inflater.inflate(layoutResourceId, parent, false); 
holder = new ComponentsHolder(); 
holder.id = (TextView) row.findViewById(R.id.id); 
holder.name = (TextView) row.findViewById(R.id.name); 
holder.description = (TextView) row.findViewById(R.id.description); 
holder.price = (TextView) row.findViewById(R.id.price); 
holder.photo = (ImageView) row.findViewById(R.id.photo); 
holder.add = (Button) row.findViewById(R.id.btnAddDish); 
row.setTag(holder); 
} else { 
holder = (ComponentsHolder) row.getTag(); 
holder.id.setText(""); 
holder.name.setText(""); 
holder.description.setText(""); 
holder.price.setText(""); 
holder.photo.setVisibility(View.GONE); //This was the real problem, if the image was not empty or gone, the view gone crazy 
} 
+0

謝謝你@KN_ ...你的解決方案爲我工作..使用 **行= null; **//添加此行來解決問題。 –

+0

感謝男人@讓它消失在其他部分解決了我的問題。 –