0

I implemented an ArrayAdapter for my ListView:

public class CalcAMRListAdapter extends ArrayAdapter<AMRStateListEntry> implements OnItemSelectedListener {

    public CalcAMRListAdapter(Context context, List<AMRStateListEntry> entries) {
        super(context, R.layout.activity_calc_amr_fragment_row, entries);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        AMRStateListEntry entry = this.getItem(position);
        ViewHolder viewHolder = null;
        LayoutInflater inflater = null;

        if(convertView == null) {
            viewHolder = new ViewHolder();
            inflater = LayoutInflater.from(this.getContext());
            convertView = inflater.inflate(R.layout.activity_calc_amr_fragment_row, parent, false);
            viewHolder.spinnerActivity = (Spinner) convertView.findViewById(R.id.calc_amr_row_spinner_activity);
            viewHolder.spinnerHours = (Spinner) convertView.findViewById(R.id.calc_amr_row_spinner_hours);
            viewHolder.textViewPal = (TextView) convertView.findViewById(R.id.calc_amr_row_textview_pal);
            viewHolder.imageButtonDelete = (ImageButton) convertView.findViewById(R.id.calc_amr_row_button_delete);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) convertView.getTag();
        }

        String pal = null;

        switch (entry.getActivity()) {
        case 1: pal = "" + 0.95;
            break;
        case 2: pal = "" + 1.2;
            break;
        case 3: pal = "" + 1.5;
            break;
        case 4: pal = "" + 1.7;
            break;
        case 5: pal = "" + 1.9;
            break;
        case 6: pal = "" + 2.4;
            break;
        default: pal = "";
            break;
        }

        viewHolder.spinnerActivity.setSelection(entry.getActivity());
        viewHolder.spinnerActivity.setOnItemSelectedListener(this);
        viewHolder.spinnerHours.setSelection(entry.getHour());
        viewHolder.spinnerHours.setOnItemSelectedListener(this);
        viewHolder.textViewPal.setText(pal);
        viewHolder.imageButtonDelete.setImageResource(R.drawable.ic_remove_row);

        return convertView;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {}

    private static class ViewHolder {
        Spinner spinnerActivity = null;
        Spinner spinnerHours = null;
        TextView textViewPal = null;
        ImageButton imageButtonDelete = null;
    }
}

As you can see each item of my ListView contains two Spinner. In the onItemSelected method i now need to get the position of the row in the ListView where the Spinner was used to select a value and i also need to differ between the two spinners in one row. My data model is the AMRStateListEntry. I need to set the selected values of the spinners inside my AMRStateListEntry.

How can i do that?

Mulgard
  • 9,877
  • 34
  • 129
  • 232
  • possible duplicate of [How do you get the selected value of a Spinner?](http://stackoverflow.com/questions/2652414/how-do-you-get-the-selected-value-of-a-spinner) – Sufian Dec 02 '14 at 11:53
  • I cant see where i can get the position of the row in the lisview from the link you posted. i know how i get the value from a spinner but first i need to get the correct spinner from the correct row in the listview. – Mulgard Dec 02 '14 at 12:02

1 Answers1

1
viewHolder.spinnerHours.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                int positionInSpinner, long id) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            // TODO Auto-generated method stub

        }
    });

Create it like this instead. Then you set public View getView(final int position, View convertView, ViewGroup parent) the position to be final. Now you can use final int position inside your onItemSelected.

And do the same for your other Spinner

Carnal
  • 21,744
  • 6
  • 60
  • 75