2011-08-05 2 views
0

나는 몇 가지 문제를 가지고 ListView (이 시각적 문제의 더)는 ListView의 행에서 같은 TextViews에서 텍스트 값과 같은 데이터를 기억하지만, 엉킴 또는 TextViews 배경 색상에 대한 측면을 잊어 . ListView에 많은 행이있는 경우에만 문제가 표시됩니다. 나는 SimpleCursorAdapterViewBinder 함께 작업 조건이 발생할 경우 TextView을 강조하려는 :의 ListView와 기억 데이터

ViewBinder 구현에서 :

public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
    CharSequence display; 
    if(view.getId() == R.id.dueDate){ 
     long timestamp = Long.parseLong(cursor.getString(3)); 
     display=DateUtils.getRelativeTimeSpanString(timestamp); 

     if(timestamp+DaysToMillis(5)> new Date().getTime()) 
     ((TextView) view).setBackgroundResource(R.color.marker_red); 

     ((TextView) view).setText(display); 
     return true; 
    } 
    else 
     return false; 
} 

그래서 다시 : 많은 행이있을 때 ListView이 배경을 복잡하게 얽힌 것 같다 색깔. 다시 스크롤 할 때 어떤 경우에는 TextView의 배경이 바뀌고 버그 또는 ListView의 논리를 찾지 못하는 것 같습니다.

따라서 행을 팽창시키기 전에 매번 setViewValue(..) 메서드가 호출됩니까? 스크롤을 위아래로 움직여도 더 이상 보이지 않는 행이 다시 표시 될 수 있습니까? 또는 setViewValue(..) 메서드는 초기 행을 팽창시키는 프로세스에 대해서만 호출되고 생성 된 객체는 ListView의 메모리에 저장됩니다.

P. 같은 TextView의 텍스트 값이 올바르게 표시됩니다. 같은 setViewValue(..) 메서드에서 같은 논리를 사용했습니다. ViewBinder는, 그것의와 setViewValue 방법은 목록보기의 열을 재활용하는 것이

답변

0

같은 초보자

그것은 나에게 보인다 (내가 틀렸다면 당신은 로마 사람입니다 특히 ... 저를 수정하시기 바랍니다) ...

  • setViewValue (..) 모든 요구 얻는다 - 위/아래가 다시 표시있어 스크롤하여도 이미 팽창 된 행을 표시 모든 행에 대한 바인딩, 그리고 "FROM이";

  • 다시 표시됩니다 행에 대한 코드의 내 하는것 조각에 관한 : 이 ((TextView) view).setText(display); - 정확한 내용을 설정합니다, 같은 타임 스탬프 처리 얻을 것이다 ...하지만 통과하지 않는 경우 :

    년 - 현재 텍스트 뷰 배경에 대한 재활용 텍스트 뷰

  • 에서 배경이있을 수 있습니다

    if(timestamp+DaysToMillis(5)> new Date().getTime()) ((TextView) view).setBackgroundResource(R.color.marker_red); 어쨌든 나는 내 if

else ((TextView) view).setBackgroundResource(0);를 추가했다