我在这里有一个ArrayAdapter的实现,它负责填充一个显示多个视图的列表视图,其中包括一个搜索栏。 现在,我正在尝试为这些搜索栏实现OnSeekBarChangeListener。我在搜索栏旁边有一个显示当前进度的TextView。但是,每当用户移动搜索栏时,我都会遇到更新此TextView的问题。当调用onProgessChanged方法时,我不能只调用 abilityItem.currentValue.setText(progress),因为那时powersItem对象必须被声明为final。现在,如果我这样做,我的其他条款将不再起作用,因为我显然无法为最终对象分配新值。
这里最好的做法是什么?
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
CompetenceItem competenceItem = null;
if (row == null) {
...
competenceItem = new CompetenceItem();
competenceItem.seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progressChanged = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
progressChanged = progress;
}
...
});
competenceItem.currentValue = (TextView) row.findViewById(R.id.textview_header_competence_current_value);
row.setTag(competenceItem);
} else {
competenceItem = (CompetenceItem) row.getTag();
}
//competenceItem gets filled with data here
return row;
}
static class CompetenceItem{
TextView title;
SeekBar seekbar;
TextView currentValue;
}
答案 0 :(得分:0)
我没有试过这个,但是,也许你可以摆脱else
条款,将(CompetenceItem) row.getTag()
作为CompetenceItem
声明中的默认值。然后,您可以在competenceItem.currentValue.setText(progress)
子句中调用if
。