There Are No Layouts Available for This Particular Object Type Please Create One to Continue

What you can do is decorate your SpinnerAdapter with one that presents a 'Select Option...' View initially for the Spinner to display with nothing selected.

Here is a working example tested for Android 2.3, and 4.0 (it uses nothing in the compatibility library, so it should be fine for awhile) Since it's a decorator, it should be easy to retrofit existing code and it works fine with CursorLoaders also. (Swap cursor on the wrapped cursorAdapter of course...)

There is an Android bug that makes this a little tougher to re-use views. (So you have to use the setTag or something else to ensure your convertView is correct.) Spinner does not support multiple view types

Code notes: 2 constructors

This allows you to use a standard prompt or define your own 'nothing selected' as the first row, or both, or none. (Note: Some themes show a DropDown for a Spinner instead of a dialog. The Dropdown doesn't normally show the prompt)

You define a layout to 'look' like a prompt, for example, grayed out...

Initial nothing selected

Using a standard prompt (notice that nothing is selected):

With a standard prompt

Or with a prompt and something dynamic (could have had no prompt also):

Prompt and nothing selected row

Usage in above example

          Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.planets_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setPrompt("Select your favorite Planet!");  spinner.setAdapter(       new NothingSelectedSpinnerAdapter(             adapter,             R.layout.contact_spinner_row_nothing_selected,             // R.layout.contact_spinner_nothing_selected_dropdown, // Optional             this));                  

contact_spinner_row_nothing_selected.xml

          <?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@android:id/text1"     style="?android:attr/spinnerItemStyle"     android:singleLine="true"     android:layout_width="match_parent"     android:layout_height="wrap_content"     android:ellipsize="marquee"     android:textSize="18sp"     android:textColor="#808080"     android:text="[Select a Planet...]" />                  

NothingSelectedSpinnerAdapter.java

          import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.SpinnerAdapter;  /**  * Decorator Adapter to allow a Spinner to show a 'Nothing Selected...' initially  * displayed instead of the first choice in the Adapter.  */ public class NothingSelectedSpinnerAdapter implements SpinnerAdapter, ListAdapter {      protected static final int EXTRA = 1;     protected SpinnerAdapter adapter;     protected Context context;     protected int nothingSelectedLayout;     protected int nothingSelectedDropdownLayout;     protected LayoutInflater layoutInflater;      /**      * Use this constructor to have NO 'Select One...' item, instead use      * the standard prompt or nothing at all.      * @param spinnerAdapter wrapped Adapter.      * @param nothingSelectedLayout layout for nothing selected, perhaps      * you want text grayed out like a prompt...      * @param context      */     public NothingSelectedSpinnerAdapter(       SpinnerAdapter spinnerAdapter,       int nothingSelectedLayout, Context context) {          this(spinnerAdapter, nothingSelectedLayout, -1, context);     }      /**      * Use this constructor to Define your 'Select One...' layout as the first      * row in the returned choices.      * If you do this, you probably don't want a prompt on your spinner or it'll      * have two 'Select' rows.      * @param spinnerAdapter wrapped Adapter. Should probably return false for isEnabled(0)      * @param nothingSelectedLayout layout for nothing selected, perhaps you want      * text grayed out like a prompt...      * @param nothingSelectedDropdownLayout layout for your 'Select an Item...' in      * the dropdown.      * @param context      */     public NothingSelectedSpinnerAdapter(SpinnerAdapter spinnerAdapter,             int nothingSelectedLayout, int nothingSelectedDropdownLayout, Context context) {         this.adapter = spinnerAdapter;         this.context = context;         this.nothingSelectedLayout = nothingSelectedLayout;         this.nothingSelectedDropdownLayout = nothingSelectedDropdownLayout;         layoutInflater = LayoutInflater.from(context);     }      @Override     public final View getView(int position, View convertView, ViewGroup parent) {         // This provides the View for the Selected Item in the Spinner, not         // the dropdown (unless dropdownView is not set).         if (position == 0) {             return getNothingSelectedView(parent);         }         return adapter.getView(position - EXTRA, null, parent); // Could re-use                                                  // the convertView if possible.     }      /**      * View to show in Spinner with Nothing Selected      * Override this to do something dynamic... e.g. "37 Options Found"      * @param parent      * @return      */     protected View getNothingSelectedView(ViewGroup parent) {         return layoutInflater.inflate(nothingSelectedLayout, parent, false);     }      @Override     public View getDropDownView(int position, View convertView, ViewGroup parent) {         // Android BUG! http://code.google.com/p/android/issues/detail?id=17128 -         // Spinner does not support multiple view types         if (position == 0) {             return nothingSelectedDropdownLayout == -1 ?               new View(context) :               getNothingSelectedDropdownView(parent);         }          // Could re-use the convertView if possible, use setTag...         return adapter.getDropDownView(position - EXTRA, null, parent);     }      /**      * Override this to do something dynamic... For example, "Pick your favorite      * of these 37".      * @param parent      * @return      */     protected View getNothingSelectedDropdownView(ViewGroup parent) {         return layoutInflater.inflate(nothingSelectedDropdownLayout, parent, false);     }      @Override     public int getCount() {         int count = adapter.getCount();         return count == 0 ? 0 : count + EXTRA;     }      @Override     public Object getItem(int position) {         return position == 0 ? null : adapter.getItem(position - EXTRA);     }      @Override     public int getItemViewType(int position) {         return 0;     }      @Override     public int getViewTypeCount() {         return 1;     }      @Override     public long getItemId(int position) {         return position >= EXTRA ? adapter.getItemId(position - EXTRA) : position - EXTRA;     }      @Override     public boolean hasStableIds() {         return adapter.hasStableIds();     }      @Override     public boolean isEmpty() {         return adapter.isEmpty();     }      @Override     public void registerDataSetObserver(DataSetObserver observer) {         adapter.registerDataSetObserver(observer);     }      @Override     public void unregisterDataSetObserver(DataSetObserver observer) {         adapter.unregisterDataSetObserver(observer);     }      @Override     public boolean areAllItemsEnabled() {         return false;     }      @Override     public boolean isEnabled(int position) {         return position != 0; // Don't allow the 'nothing selected'                                              // item to be picked.     }  }                  

cottoprominted85.blogspot.com

Source: https://stackoverflow.com/questions/867518/how-to-make-an-android-spinner-with-initial-text-select-one

0 Response to "There Are No Layouts Available for This Particular Object Type Please Create One to Continue"

Post a Comment

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel