我正在使用一个使用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;
}
ViewWrapper:
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的行为。但是,我希望它有自己的行为。
缓解这种情况的最佳方法是什么?谢谢。
答案 0 :(得分:0)
每次都可能需要对布局进行膨胀,而不是重新使用传入的convertView。除非你有很多行,否则这不应该是一个问题。
答案 1 :(得分:0)
我必须实现类似的功能,这就是我所做的。我在getview
我为getView
每当调用监听器时,我会找到seekbars parent,然后从父级到textview执行findviewbyid
。
所以现在我有了我必须更新的textview和搜索栏。我需要做的就是从数组中设置文本。
这里有一些代码可以帮助你。
private OnTouchListener touchListener = new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
View parent = (View) v.getParent();
TextView textView = (TextView) parent
.findViewById(R.id.id_grade_tooltip);
if (textView == null) {
} else {
SeekBar seekBar = (SeekBar) v;
textView.setText(String.valueOf(seekBar.getProgress())
+ "%");
}
return false;
}
};