У меня есть ListView, в котором каждый элемент имеет SeekBar.
Когда я обновляю прогресс Seekbar, он записывается в базу данных, поэтому его можно перезагрузить при повторном использовании приложения.
К сожалению, если ListView прокручивается вверх или вниз, так что любой из элементов исчезает с видимого экрана, когда они перерисовываются, они рисуются со старым значением.
Как получить действие "обновить », когда SeekBar обновляется, так что значения в ListView синхронизируются с базой данных, это должно остановить перерисовку SeekBar с устаревшими данными.
Обновление:
Я решил, что это происходит из-за того, что базовый ArrayList не обновляется, поэтому, пока база данных записывается при обновлении прогресса, ArrayList находится в том же состоянии, в котором он был первоначально передан конструктору.Как мне заполнить ArrayList, когда я обновил базовую базу данных?
Код
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
try {
if (view == null) {
LayoutInflater vi = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = vi.inflate(R.layout.task_list_item, null);
}
final Task t = mList.get(position);
if (t != null) {
/* assign layout elements */
final SeekBar seekBar = (SeekBar) view.findViewById(R.id.seek);
final TextView textViewDescription = (TextView) view
.findViewById(R.id.task_description_text_view);
final TextView textViewTaskId = (TextView) view
.findViewById(fyp.proj.R.id.task_id_text_view);
final TextView textViewTaskTitle = (TextView) view
.findViewById(R.id.task_title_text_view);
/* populate layout with task details */
textViewTaskId.setText(String.valueOf(t.getTaskId()));
textViewTaskTitle.setText(t.getTaskTitle());
textViewDescription.setText(t.getTaskDesc());
seekBar.setProgress(t.getProgress());
seekBar.setTag(t.getTaskId());
/* attach listener */
attachProgressUpdatedListener(seekBar);
}
} catch (Exception e) {
Log.i(TaskAdapter.class.toString(), Log.getStackTraceString(e));
}
return view;
}
private void attachProgressUpdatedListener(SeekBar seekBar) {
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
public void onStopTrackingTouch(SeekBar seekBar) {
int progress = seekBar.getProgress();
int task_id = (Integer) seekBar.getTag();
// task handler instansiated with zero as parent project id is
// not needed here.
TaskHandler taskHandler = new TaskHandler(DBAdapter
.getDBAdapterInstance(getContext()), 0);
taskHandler.updateTaskProgress(task_id, progress);
}
public void onStartTrackingTouch(SeekBar seekBar) {
// empty as onStartTrackingTouch listener not being used in
// current implementation
}
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// empty as onProgressChanged listener not being used in
// current implementation
}
});
}