Issue
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();
}
Answered By - Akaki Kapanadze
Answer Checked By - Katrina (JavaFixing Volunteer)