2012-05-08 3 views
1

이렇게하면 페이지가로드 될 때 내 화면이 표시됩니다. 그러나 목록을 스크롤하기 시작하면 모든 기록이 변경되기 시작하고 정말 이상하게 보입니다. 나는 왜, 왜 어떤 제안을 모르겠다? 내가 위아래로 내 ListView을 스크롤 한 후 ListView는 스크롤하는 동안 레코드를 변경합니다.

Original

는 화면입니다. 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

안드로이드의 ListView 뷰를 재활용. 현재 문제는 어댑터가 항상 TextViews에 새 데이터를 추가한다는 것입니다. 이제 새 행이 표시 될 때마다 새 행의 데이터를 이전 데이터에 추가합니다.

이 문제를 해결하려면 convertView 매개 변수를 사용하는 경우 이전 데이터에서 TextViews를 지워야합니다. 나를 위해 일한

+0

나는 다음을 추가했습니다 : tt.setText (""); bt.setText (""); at.setText (""); bt.setText (""); 그리고 그것은 작동합니다! 그래서 고마워! – user1264255

+0

어디에 추가할까요? textview.setTexr (""); in adapter 답을 편집 할 수 있습니까 @ 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_ ... 나를 위해 일하는 해결책 .. ** row = null; ** // 문제를 해결하려면이 줄을 추가하십시오. –

+0

고맙습니다. @ 다른 부분에 들어가서 제 문제를 해결했습니다. –

관련 문제