Problem: Ich habe viele seekbars (verwaltet von RecyclerView.Adapter), wenn ich scroll Ansicht, und spezifische seekbar nicht mehr angezeigt wird, setzt Fortschritt in dieser Suchleiste von selbst auf 0 (ich kann sehen Sie dies in OnSeekBarChangeListner). Ich wundere mich warum.Seekbar ändert Wert selbst in RecyclerView
Erwartetes Verhalten: Wenn der Benutzer den Wert nicht durch Ziehen der Suchleiste ändert, sollte sich der Fortschritt nicht ändern.
Meine Workaround für jetzt ist zu prüfen, ob Suchleiste angezeigt wird, und nur als Wert speichern.
onBindViewHolder
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int positi
final DMXChannel currentChannel = channels.get(position);
... // Not relevant
else if (holder instanceof ViewHolderSlider) {
((ViewHolderSlider) holder).container.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (listner != null)
listner.onLongItemClicked(currentChannel.getIndex(), v);
return true;
}
});
final ViewHolderSlider holderSlider=((ViewHolderSlider) holder);
((ViewHolderSlider) holder).tvPosition.setText("" + (currentChannel.getIndex() + 1));
int value =currentChannel.getValue();
holderSlider.slider.setProgress(value);
((ViewHolderSlider) holder).tvValue.setText("" + currentChannel.getValue());
((ViewHolderSlider) holder).slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
holderSlider.tvValue.setText("" + progress);
if(position!=RecyclerView.NO_POSITION) {
if(seekBar.isShown())
currentChannel.setValue(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}
Mein ViewHolder für seekbars
public static class ViewHolderSlider extends RecyclerView.ViewHolder {
public TextView tvPosition;
public TextView tvValue;
public CardView container;
public VerticalSeekBar slider;
public ViewHolderSlider(View v) {
super(v);
slider= (VerticalSeekBar)v.findViewById(R.id.slider);
Drawable thumb = MyApp.getContext().getResources().getDrawable(R.drawable.ic_add_white_24dp);
slider.setThumb(thumb);
thumb.mutate().setAlpha(0);
container= (CardView)v.findViewById(R.id.rootView);
tvPosition= (TextView) v.findViewById(R.id.tv_channel_number);
tvValue = (TextView) v.findViewById(R.id.tv_value);
}
}
Irgendwelche Lösungen dazu? – Orcun