【问题标题】:Modifying an object's attributes within an inner class在内部类中修改对象的属性
【发布时间】:2015-01-05 23:04:30
【问题描述】:

我在这里有一个 ArrayAdapter 的实现,它负责填充一个显示多个视图的列表视图,其中包括一个搜索栏。 现在,我正在尝试为这些搜索栏实现 OnSeekBarChangeListener。我在搜索栏旁边有一个 TextView,显示当前进度。但是,每当用户移动搜索栏时,我都会遇到更新此 TextView 的问题。当调用 onProgessChanged 方法时,我不能只调用 competenceItem.currentValue.setText(progress),因为这样,competenceItem 对象就必须被声明为 final。现在,如果我要这样做,我的 else 子句将不再起作用,因为我显然无法为最终对象分配新值。

这里最好的做法是什么?

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;
}

【问题讨论】:

  • 让它成为您的 Activity 类成员,而不是本地最终变量
  • 对同一个 competenceItem 对象创建一个临时的 final 引用,然后在匿名类中使用它。

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


【解决方案1】:

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

【讨论】:

  • 我认为我在原始帖子中表达的问题不够清楚。我的问题是,无论何时调用 onProgressChanged,都必须更新 currentValue。
  • 是的,但您似乎不能调用competenceItem.currentValue.setText(progress),因为必须将CompetenceItem 声明为final...但是如果您将其声明为final,则在else 子句中您不能t 为CompetenceItem 分配任何值。所以我的回答是这样的:将CompetenceItem 声明为final 并在onProgressChanged 方法中调用competenceItem.currentValue.setText(progress)(当然,去掉else 子句)。
猜你喜欢
  • 2011-03-10
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 2016-07-30
  • 2020-03-09
  • 2020-06-05
  • 1970-01-01
相关资源
最近更新 更多