Problem: I have many search bars (managed by RecyclerView.Adapter), when I view the view and the specific search drum is no longer displayed, the progress in this search bar sets itself 0 (I see this in OnSeekBarChangeListner). I wonder why.
Expected Behavior: When the user does not change the value using the moving arrow, the progress should not change.
My workaround at the moment is to check for a search pointer and only save the value.
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) { } }); } }
My ViewHolder for search engines
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); } }
source share