2012-05-27 2 views
0

ViewBinder에 이상한 행동이 있습니다. 모든 TextViews에 좋은 작품. (내 코드에서 제거 된) CheckBoxes 및 사용자 정의 widgets progressChart를 사용하면 아래로 스크롤하거나 다시 위로 올리면 값이 목록의 오른쪽 위치에 저장되지 않습니다. 모두 매우 무작위로 보입니다. 그러나 TextViews는 항상 정확합니다.ViewBinder는 임의의 내용을 만듭니다

SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { 
      @Override 
      public boolean setViewValue(View view, Object data, 
        String textRepresentation) { 
       if (view.getId() == R.id.progress) { 
        ProgressChart progressChart = (ProgressChart) view; 

       progressChart.setVisibility(ImageButton.GONE); 
        } else { 
         if (x.substring(0, 1).equals("1")) { 
          int theProgress = Integer.parseInt(x.substring(1)); 
          progressChart.setProgressDarkRed(theProgress); 
         } 
       } 
       if (view.getId() == R.id.textView1) { 
        TextView textView = (TextView) view; 
        textView.setText((String) data); 
       } 
       return true; 
      } 
     }; 
     simpleAdapter.setViewBinder(viewBinder); 
     setListAdapter(simpleAdapter); 

어떤 도움은 매우 내가 비슷한 문제가 있지만, 내 코드에 대한 답 나던 적합을 발견

를 감사 : 다음은 내 코드입니다. Problems with the ViewBinder

답변

1

보기 재활용 때문입니다.

체크 상자의 상태를 유지하고 어댑터의보기를 설정하는 개체를 만들어야합니다.

나는 위치가 그것에에 전달되지 않습니다 (하지만 난 한 번도 안 써봤 정직하게) 이후가 viewbinder으로 수행 할 수 있다고 생각하지 않습니다 ..

당신은 아마 그것을해야 할 것 getView.

다음은 SimpleCursorAdapter로 이동하는 방법을 보여주는 이전 답변의 링크입니다 (이 정보는 arrayadapter에도 적용 할 수 있습니다). SO Answer

+0

예를 들어 textView의 텍스트로 작업합니다. 이는 ViewBinder가 몇 가지 유스 케이스를 수렴한다는 것을 의미합니다. 이것은 매우 약하게 만든다. – user1324936

+0

필연적이지 않다. ** 모든 데이터 소스에서 ** 작업 중입니다. 확인란은 데이터 소스의 일부가 아닙니다. 체크 박스 상태를 데이터 소스에 넣으면 (이전에 쇼핑 앱용으로 했음), 그 상태를 읽거나 설정하고 어댑터를 지원하는 데이터의 체크 박스를 토글하는 메소드를 만들 수 있습니다. 그런 다음 뷰 바인더를 통해 목록으로 다시 흐릅니다. 대부분의 사람들은 그렇게하고 싶지 않으므로, 사용하고자하는 추가 항목의 상태를 유지하기위한 배열을 추가하고'getView'instead를 사용합니다. – Barak

+0

데이터 소스 란 무엇을 의미하며 어떻게 데이터 소스에 넣을 수 있습니까? – user1324936

관련 문제