androidclassandroid-recyclerviewnumberpicker

How can i get the value from all the number pickers in my recycler view?


Hello everyone here's my code with recycler view, it works it charges 3 options from my database but my problem is when i try to get all the 3 values in my recycler view

First of all here's my class:

public class OpcionesPonderacionClass {
String Titulo;

public OpcionesPonderacionClass(String titulo) {
    Titulo = titulo;
}
 public OpcionesPonderacionClass() {

 }

public String getTitulo() {
    return Titulo;
}

public void setTitulo(String titulo) {
    Titulo = titulo;
}

}

Here's my adapter code:

public class OpcionesPonderacionAdapter extends RecyclerView.Adapter<OpcionesPonderacionAdapter.ViewHolderOpcionesPonderacion> {

Context mCtx;
ArrayList<OpcionesPonderacionClass> opcionesPonderacionList;


public OpcionesPonderacionAdapter(Context mCtx, ArrayList<OpcionesPonderacionClass> opcionesList) {
    this.mCtx = mCtx;
    this.opcionesPonderacionList = opcionesList;
}

@NonNull
@Override
public ViewHolderOpcionesPonderacion onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view  = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemopcionponderacion,null);
    return new ViewHolderOpcionesPonderacion(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolderOpcionesPonderacion holder, final int position) {
    holder.tituloOpcionPonderacion.setText(opcionesPonderacionList.get(position).getTitulo());

    holder.npValueOpcionPonderacion.setMinValue(0);
    holder.npValueOpcionPonderacion.setMaxValue(10);

}

@Override
public int getItemCount() {
    return opcionesPonderacionList.size();
}

public class ViewHolderOpcionesPonderacion extends RecyclerView.ViewHolder {
    TextView tituloOpcionPonderacion;
    NumberPicker npValueOpcionPonderacion;

    public ViewHolderOpcionesPonderacion(@NonNull View itemView) {
        super(itemView);
        tituloOpcionPonderacion = itemView.findViewById(R.id.tv_TituloOpcionPonderacion);
        npValueOpcionPonderacion = itemView.findViewById(R.id.np_ValorNumero);

    }
}

}

I can see all the options with their numberpickers from 0 to 10 but for now i'm trying to get a Toast with all the values separated with comma",".

My main problem is how to .getValue() from all the number pickers generated.


Solution

  • You can set up listener to observe value changes within a NumberPicker and collect values in a some Collection.

    public static class OpcionesPonderacionAdapter
            extends RecyclerView.Adapter<OpcionesPonderacionAdapter.ViewHolderOpcionesPonderacion> {
    
        Context mCtx;
        ArrayList<OpcionesPonderacionClass> opcionesPonderacionList;
    
        private final Map<Integer, Integer> pickerValues = new HashMap<>();
        private OnNumberPickerValueChangeListener valueChangeListener
                = new OnNumberPickerValueChangeListener() {
            @Override
            public void onValueChange(int position, int value) {
                pickerValues.put(position, value);
            }
        };
    
        public OpcionesPonderacionAdapter(Context mCtx, ArrayList<OpcionesPonderacionClass> opcionesList) {
            this.mCtx = mCtx;
            this.opcionesPonderacionList = opcionesList;
        }
    
        @NonNull
        @Override
        public ViewHolderOpcionesPonderacion onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemopcionponderacion, null);
            return new ViewHolderOpcionesPonderacion(view, valueChangeListener);
        }
    
        @Override
        public void onBindViewHolder(@NonNull ViewHolderOpcionesPonderacion holder, final int position) {
            holder.tituloOpcionPonderacion.setText(opcionesPonderacionList.get(position).getTitulo());
    
            holder.npValueOpcionPonderacion.setMinValue(0);
            holder.npValueOpcionPonderacion.setMaxValue(10);
    
        }
    
        @Override
        public int getItemCount() {
            return opcionesPonderacionList.size();
        }
    
        public Map<Integer, Integer> getPickerValues() {
            return pickerValues;
        }
    
        public class ViewHolderOpcionesPonderacion extends RecyclerView.ViewHolder {
    
            TextView tituloOpcionPonderacion;
            NumberPicker npValueOpcionPonderacion;
    
            public ViewHolderOpcionesPonderacion(@NonNull View itemView,
                                                 final OnNumberPickerValueChangeListener listener) {
                super(itemView);
                tituloOpcionPonderacion = itemView.findViewById(R.id.tv_TituloOpcionPonderacion);
                npValueOpcionPonderacion = itemView.findViewById(R.id.np_ValorNumero);
                npValueOpcionPonderacion.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
                    @Override
                    public void onValueChange(NumberPicker picker,
                                              int oldVal,
                                              int newVal) {
                        listener.onValueChange(getAdapterPosition(), newVal);
                    }
                });
            }
        }
    
        interface OnNumberPickerValueChangeListener {
            void onValueChange(int position, int value);
        }
    }
    

    to get values:

    @Override
    public void onClick(View v) {
        final Collection<Integer> values = adapter.getPickerValues().values();
        final String result = TextUtils.join(".", values);
        Toast.makeText(this, result ,Toast.LENGTH_SHORT).show();
    }