Get the position in a ListView of a Spinner and get its selected value

本秂侑毒 提交于 2019-12-12 04:34:10

问题


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?


回答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



来源:https://stackoverflow.com/questions/27248695/get-the-position-in-a-listview-of-a-spinner-and-get-its-selected-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!