I'm implementing a custom list view which has Spinner, i have TextView and others for each list item. And I want to get selected value of spinner for each row of list view. But all i get is first item of Spinner. Can anyone help with this?
I looked through many of posts here but all the answers requires to changing the code completely. I don't want to write all my code all over again.
Here is my custom adapter:
public class CustomAdapter extends ArrayAdapter<DataModel> {
private ArrayList<DataModel> dataSet;
Context mContext;
private static class ViewHolder {
TextView txtName;
CheckBox checkBox;
TextView price;
Spinner spinner;
DataModel data1;
}
public CustomAdapter(ArrayList<DataModel> data, Context context) {
super(context, R.layout.row_item, data);
this.dataSet = data;
this.mContext = context;
}
@Override
public int getCount() {
return dataSet.size();
}
@Override
public DataModel getItem(int position) {
return dataSet.get(position);
}
@Override
public View getView(int position, View convertView, @NonNull ViewGroup parent) {
final ViewHolder viewHolder;
final View result;
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_item, parent, false);
viewHolder.txtName = (TextView) convertView.findViewById(R.id.txtName);
viewHolder.checkBox = (CheckBox) convertView.findViewById(R.id.checkBox);
viewHolder.price = (TextView) convertView.findViewById(R.id.priceid);
viewHolder.spinner = (Spinner) convertView.findViewById(R.id.spinner);
viewHolder.spinner.setFocusable(false);
result=convertView;
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
result=convertView;
}
final DataModel item = getItem(position);
viewHolder.txtName.setText(item.name);
viewHolder.checkBox.setChecked(item.checked);
viewHolder.price.setText(item.price.toString());
viewHolder.spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
item.setPortion(viewHolder.spinner.getSelectedItem().toString());
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
return result;
}
}
And my Data Model:
public class DataModel {
public String name;
public Double price;
boolean checked;
public String portion;
public void setPortion(String portion) {
this.portion = portion;
}
public String getPortion() {
return portion;
}
public boolean isChecked() {
return checked;
}
public void setChecked(boolean checked) {
this.checked = checked;
}
public Double getPrice() {
return price;
}
public String getName() {
return name;
}
public DataModel(String name, Double price, boolean checked) {
this.name = name;
this.price = price;
this.checked = checked;
}
public DataModel(String name) {
this.name = name;
}
}