ここには、シークバーを含む複数のビューを表示するリストビューの作成を担当する 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;
}