修改内部类中对象的属性

时间:2014-11-09 16:22:19

标签: java android inner-classes final android-seekbar

我在这里有一个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;
}

1 个答案:

答案 0 :(得分:0)

我没有试过这个,但是,也许你可以摆脱else条款,将(CompetenceItem) row.getTag()作为CompetenceItem声明中的默认值。然后,您可以在competenceItem.currentValue.setText(progress)子句中调用if