title: How to hide one item in an Android Spinner
body: <p>I am looking for a way to hide one item in an Android spinner widget. This would allow you to simulate a spinner with no items selected, and ensures that the onItemSelected() callback is always called for every item selected (if the hidden item is the "current" one). Normally there is always one item in the spinner that doesn't generate a callback, namely the current one. </p>
  
  <p>There is some code on stackoverflow for how to disable (gray out) items, but not how to hide items completely as if they don't exist.</p>
  
  <p>After much experimentation I've come up with a somewhat hack-ish solution that works on various old and new Android platforms. It has some minor cosmetic drawbacks which are hard to notice. I'd still like to hear of a more official solution, other than "don't do that with a spinner". </p>
  
  <p>This always hides the first item in the spinner, but could fairly easily be extended to hide an arbitrary item or more than one item. Add a dummy item containing an empty string at the start of your list of spinner items. You may want to set the current spinner selection to item 0 before the spinner dialog opens, this will simulate an unselected spinner.</p>
  
  <p>Spinner setup example with ArrayAdapter method override:</p>
  
  <pre><code>List&lt;String&gt; list = new ArrayList&lt;String&gt;();
  list.add("");   //  Initial dummy entry
  list.add("string1");
  list.add("string2");
  list.add("string3");
  
  // Populate the spinner using a customized ArrayAdapter that hides the first (dummy) entry
  ArrayAdapter&lt;String&gt; dataAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_spinner_item, list) {
      @Override
      public View getDropDownView(int position, View convertView, ViewGroup parent)
      {
          View v = null;
  
          // If this is the initial dummy entry, make it hidden
          if (position == 0) {
              TextView tv = new TextView(getContext());
              tv.setHeight(0);
              tv.setVisibility(View.GONE);
              v = tv;
          }
          else {
              // Pass convertView as null to prevent reuse of special case views
              v = super.getDropDownView(position, null, parent);
          }
  
          // Hide scroll bar because it appears sometimes unnecessarily, this does not prevent scrolling 
          parent.setVerticalScrollBarEnabled(false);
          return v;
      }
  };
  
  dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
  mySpinner.setAdapter(dataAdapter);
  </code></pre>