JuiCe
JuiCe

Reputation: 4191

Set Spinner to Unselected

I currently have a whole bunch of spinners in my application. I wasn't thinking much and for each spinner, the first index is filled with N/A. It's not a big deal, but I was hoping to make it a bit cleaner.

I was wondering if there was a way that instead of calling setSelection( index ), I wanted to know if there was a way to set a Spinner to have nothing selected.

Basically, I want the spinner to have a list of items within it, but display none of them until you click on it. I also don't want there to be a blank index at the top.

I think its quite possible that there is no way to do this, so if anyone is sure of this, please let me know.

Thanks.

Upvotes: 6

Views: 22642

Answers (4)

Meher
Meher

Reputation: 2585

Modifying the list which holds data can lead lots of errors or tough to manage the data. Instead of manipulating the list,you can add item in adapter with NONE item. Like this

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
    adapter.add("NONE");
    adapter.addAll(products);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    mSpinner.setAdapter(adapter);

Upvotes: 1

Goku
Goku

Reputation: 1663

spinners have to have a selected state. i would recommend having a "no selection" option

Another option is to have the bottom button selected and then set that one to be invisible (the reason i set the last one to selected is so that you dont have a chunk of blank space in your app as that looks a bit trashy):

case SPINNER_OPTION_FIRST:
    yourSpinnerLabel.setVisibility(View.VISIBLE);
    yourTextField.setVisibility(View.VISIBLE);
    break;        

// do this for all your other ones if you want

case SPINNER_OPTION_LAST:
    yourSpinnerLabel.setVisibility(View.GONE);
    yourTextField.setVisibility(View.GONE);

maybe not the most efficient but it works so i hope that helps (still new so cut me some slack)!

Upvotes: 6

Grzegorz Dev
Grzegorz Dev

Reputation: 3143

I tried

// getSelectedItemPosition() returns -1 if there is nothing selected
spinner.setSelection(-1); 

but it failed [spinner was setting 1st element from list].

I added "empty position" to spinner data which mimics that "nothing is selected". Note that 'empty position' is not visible on 'drop down' list.

BTW. Sorry for C#, hope the concept is clearly visible.

Custom adapter:

class CustomAdapter<T> : ArrayAdapter<T> {
    public override int Count {
        get { return base.Count - 1; }
    }
}

Init spinner:

var data = new List<string> { "elem 1", "elem 2", "" };
spinner.Adapter = new CustomAdapter<String>(this, Resource.Layout.SimpleSpinnerItem, data);
spinner.SetSelection(2);

Upvotes: -2

moDev
moDev

Reputation: 5258

Its better to put first position as blank, so that it can be seen as nothing selected.

Upvotes: 9

Related Questions