안드로이드 개발 질문/답변
(글 수 45,052)
Adapter,AsyncTask를 이용하여, 다운로드기능을 만드려고하는데,
ProgressBar를 어떻게 참조해야 될지 모르겠네요..
각각의 아이템의 다운로드 버튼이 있고,
버튼을 누르면, 다운이 되면 각 아이템의 있는 ProgressBar가 갱신 됩니다.
근데 제일 마지막 아이템의 프로그래스바만 경신 되네요.. ㅜ.ㅜ
각각의 프로그래스바의 포인터를 어떻게 참조해야 될지 감이 안옵니다.
버튼을 눌렀을때 다운로드클래스 (AsyncTask상속)을 생성하고, 실행해줍니다.
물론 다운로드클래스에 onProgressUpdate 메소드로 프로그래서바가 움직이구요.
현재 어댑터안에 InnerClass로 다운로드클래스가 있습니다. 프로그래스바를 참조하기 위해서 그렇게 했구요.
아래의 소스는 버튼을 눌렀을때이구요..
Button.OnClickListener downClickListener = new Button.OnClickListener() {
@Override
public void onClick(View v) {
Lecture lecture = (Lecture) v.getTag();
if(buttonFlag) {
download.execute();
Button buttonView = (Button) v;
buttonView.setText("중지");
buttonFlag = false;
} else {
download.pause();
Button buttonView = (Button) v;
buttonView.setText("다운");
buttonFlag = true;
}
}
};
각각의 프로그래스바를 어떻게 참조하면 좋을까요?
고수님들 답변 부탁드립니다.




재활용 안쓰면 될지 모르나 메모리릭등의 가능성을 안고 갑니다.
제가 생각하는 방법은 해시맵하나 두고 거기에다가 position(key)과 progress(value)를 저장합니다.
getView에서는 해시맵의 데이터를 통해 position에 따라 progressbar를 갱신하시구요....
Async에서는 다운로드 하시면서 해시맵의 progress 값을 증가시켜주세요...
이제 UI에 어떻게 갱신할 것인가에 대한 문제가 남는데요....
숫자 변경될때마다 notifyDataSet하면 아마 스크롤이 꼼짝 않고 있을수도 있습니다.
그래서 이부분은 타이머 하나 두고 1초(빠른갱신이 필요없으면 더 길게 해두 되구요)마다 갱신하게끔 만드는게 나을거 같습니다.
모든 다운로드가 끝나면 타이머 중지하는 루틴은 반드시 첨부하시구요.