Android spinner prompt not working [duplicate]

2019-07-29 01:44发布

问题:

This question already has an answer here:

  • How to make an Android Spinner with initial text “Select One”? 36 answers

I have Spinners that I am using in my application. They are working fine with one exception. I have set prompts for each one, but they are not showing. I am setting ArrayAdapters to the Spinners during onCreate, and my guess is that the setAdapter method is automatically setting the selection to position 0. Is there a way to set the prompt and have it work as expected?

Here is a code piece:

From the layout file:

<Spinner android:id="@+id/selPunter"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:prompt="@string/select_quarterback_prompt"
         android:layout_marginLeft="20sp"
         android:layout_marginRight="20sp" />

From activity:

offenseList = new ArrayAdapter<PlayerVO>(this,
                                         R.layout.select_item_closed,
                                         gdm.getPlayersByTeamId(offenseId));
offenseList.setDropDownViewResource(R.layout.select_item);
selKicker.setAdapter(offenseList);

回答1:

This seems to happen even if you put the OnItemSelectedListener in the onStart() method of the activity.

The work around I did for this issue was I put a default message in position 0 of my resource array ("Select Trip Type"). So when the OnItemSelectedListener is called, if position 0 is selected, then do nothing. Here is my code:

 mTripTypeSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> parent,View v,int position,long rowId) {
            //boolean used for hiding spinner
            boolean hideSpinner = true;

            switch(position){
                case 0:
                    //nothing was selected - defualt "Select Trip Type"
                    hideSpinner = false;
                    break;
                case 1:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.DELIVERY);
                    break;
                case 2:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.START_OF_BREAK);
                    break;
                case 3:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.END_OF_BREAK);
                    break;
                case 4:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.START_OF_LUNCH);
                    break;
                case 5:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.END_OF_LUNCH);
                    break;
                case 6:
                    mCurrentStop.setStopType(Stop.STOP_TYPE.END_OF_TRIP);
                    break;
            }

            //display other data screens
            displayData(hideSpinner);
        }
        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            mCurrentStop.setStopType(Stop.STOP_TYPE.DELIVERY);
        }
    });