各行がテキスト ビューとプログレス バーで構成される ListView を利用する Android アプリに取り組んでいます。ユーザーが長いリストをスクロールする必要がない限り、物事はスムーズに機能します。
ProgressBars は、現在画面に表示されていない他の ProgressBars の進行状況を引き継ぎ始めます。
これは GetView の実装に起因する一般的な問題であることは理解していますが、ProgressBars を使用する最善の方法を考えています。
GetView:
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ViewWrapper wrapper;
ProgressBar myProgressBar;
int initProgress = myData.get(position).getProgress();
if (row == null){
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.row, null);
wrapper = new ViewWrapper(row);
row.setTag(wrapper);
}
else{
wrapper = (ViewWrapper)row.getTag();
}
RowModel model = getModel(position);
wrapper.getPid().setText(model.toString());
myProgressBar = wrapper.getProgressBar();
myProgressBar.setProgress(initProgress);
myProgressBar.setMax(100);
myProgressBar.setTag(new Integer(position));
return row;
}
ビューラッパー:
public class ViewWrapper {
View base;
TextView pid = null;
ProgressBar pb= null;
ViewWrapper(View base){
this.base = base;
}
TextView getPid(){
if(pid == null){
pid = (TextView)base.findViewById(R.id.pid);
}
return(pid);
}
ProgressBar getProgressBar(){
if(pb== null){
pb= (ProgressBar)base.findViewById(R.id.progressbar);
}
return(pb);
}
}
この問題は次のことに関連しているようです。
myProgressBar = wrapper.getProgressBar();
その ProgressBar はリサイクルされた ProgressBar の動作を開始するためです。ただし、独自の動作が必要です。
これを軽減する最善の方法は何ですか?ありがとう。