스크롤하면 위치가 엉망이되는건 이미 알려진 사실이구요..
그건 원조님이 말씀하신대로 리스트뷰는 재사용을 하기때문에 뷰의 위치값이 뒤죽박죽이 되는건 어쩔수없습니다.
getView에서 레이아웃 안의 view를 넘겨버리면 업데이트야 될수있겠지만 순서가 보장되는건 아니니깐 그렇게하시면 안되구요.
layout 안의 view를 컨트롤할려면 layout 자체를 새로 새로고침해주는수밖에 없습니다.
예를들어서, 전역으로 ArrayList나 배열을 하나 선언해주시구요.
ArrayList<Integer> progress;
listview의 아이템 갯수만큼 add를 해줍니다.
for(리스트갯수){progress.add(0);} //갯수초기화
그다음에 getView에는 textview.setText(progress.get(position)+"%"); 을 해서 arrayList의 position값에 맞는 텍스트를 갖다 붙입니다.
그런다음 AsyncTask에서 원하는 textview의 position값을 arrayList에서만 변경시켜줍니다.
progress.set(position, 10);
그다음 listviewAdapter.notifiyDataSetChange인가 뭔가 해주면 리스트뷰가 새로 갱신이 됩니다.
물론 이작업은 UI Thread에서해야되구요.(ASyncTask의 onUpdate인가 뭔가에서)
그러면 textView에서는 새로 변경된 arrayList의 값을 적용하겠죠
View자체를 컨트롤하려고하지마시고 안에 변수값만 변경시켜서 새로고침한다고 생각하시면됩니다.