微调器不选择第一项

spinner not selecting first item

这是我的代码

Spinner agegroup;

 public void generateAgeGroupSpinner() {
        final List<AgeGroupModel> ageGroup = new ArrayList<>();
        agegroup = (Spinner) findViewById(R.id.ageGroupSpinner);
        // Spinner click listener
        agegroup
                .setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent,
                                               View view, int position, long id) {
                        // On selecting a spinner item
                        String item = parent.getItemAtPosition(position)
                                .toString();

                    }

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

                    }
                });
        // Spinner Drop down elements
        ageGroupList.add(new AgeGroupModel(AgeGroup.BELOW18.getId(), AgeGroup.BELOW18.getName()));
        ageGroupList.add(new AgeGroupModel(AgeGroup.BETWEEN_19_35.getId(), AgeGroup.BETWEEN_19_35.getName()));
        ageGroupList.add(new AgeGroupModel(AgeGroup.BETWEEN_36_45.getId(), AgeGroup.BETWEEN_36_45.getName()));
        ageGroupList.add(new AgeGroupModel(AgeGroup.ABOVE45.getId(), AgeGroup.ABOVE45.getName()));

        // Creating adapter for spinner
        ArrayAdapter<AgeGroupModel> agedataAdapter = new ArrayAdapter<AgeGroupModel>(
                this, android.R.layout.simple_spinner_item, ageGroup);

        // Drop down layout style - list view with radio button
        agedataAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner

        agegroup.setAdapter(typeSpinnerAdapterForAge);
        agegroup.setOnItemSelectedListener(typeSelectedListener);
        agegroup.setOnTouchListener(typeSpinnerTouchListener);
}

设置微调器适配器 typeSpinnerAdapterForAge

private SpinnerAdapter typeSpinnerAdapterForAge = new BaseAdapter() {

        private TextView text;

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = mInflator.inflate(R.layout.row_spinner, null);
            }
            text = (TextView) convertView.findViewById(R.id.spinnerTarget);
            if (!selected) {
                if (parent.equals(agegroup)) {
                    text.setText(getText(R.string.age_group));
                }
            } else {
                text.setText(ageGroupList.get(position).getName());
            }
            return convertView;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public AgeGroupModel getItem(int position) {
            return ageGroupList.get(position);
        }

        @Override
        public int getCount() {
            return ageGroupList.size();
        }

        public View getDropDownView(int position, View convertView,
                                    ViewGroup parent) {
            if (convertView == null) {
                convertView = mInflator.inflate(
                        android.R.layout.simple_spinner_dropdown_item, null);
            }
            text = (TextView) convertView.findViewById(android.R.id.text1);
            text.setText(ageGroupList.get(position).getName());
            return convertView;
        }

        ;
    };

typeSpinnerSearchListener

private View.OnTouchListener typeSpinnerTouchListener = new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            selected = true;
            ((BaseAdapter) typeSpinnerAdapter).notifyDataSetChanged();
            return false;
        }
    }; 

微调器下拉列表的第一个值最初未 selected, 需要 select 一些其他项目然后代码在第一个项目上也能正常工作

默认情况下,第一项在微调器中被选中,这就是为什么 OnItemSelectListener 不再被调用的原因,所以如果你想避免这种情况,那么你需要全局放置一个布尔变量,然后根据布尔变量设置条件。我认为通过这种方式你可以解决你的问题。