I have a android spinner to load to do some selection and I'm loading data to it. There is a situation I want to set the data to load in spinner to null. This helped me to select the position, sizeSP.setSelection(0);
But I want to set the data to be load to null. So when clicked on the spinner it shouldn't anything.
            Asked
            
        
        
            Active
            
        
            Viewed 1,025 times
        
    -2
            
            
         
    
    
        modabeckham
        
- 227
- 5
- 19
- 
                    1use spinner.setClickable(false); – Vishwajit Palankar Apr 28 '15 at 11:18
- 
                    I want to set the data to null. – modabeckham Apr 28 '15 at 11:20
- 
                    Somewhere i have seen something like spinner.set(null); but I can't remmeber where I saw it use it in this issue – modabeckham Apr 28 '15 at 11:21
2 Answers
0
            
            
        Check this Link, a guy has given a perfect answer by creating a custom class adapter.
 /**
 * A modified Spinner that doesn't automatically select the first entry in the list.
 *
 * Shows the prompt if nothing is selected.
 * Limitations: does not display prompt if the entry list is empty.
 */
public class NoDefaultSpinner extends Spinner {
public NoDefaultSpinner(Context context) {
    super(context);
}
public NoDefaultSpinner(Context context, AttributeSet attrs) {
    super(context, attrs);
}
public NoDefaultSpinner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}
@Override
public void setAdapter(SpinnerAdapter orig ) {
    final SpinnerAdapter adapter = newProxy(orig);
    super.setAdapter(adapter);
    try {
        final Method m = AdapterView.class.getDeclaredMethod(
                           "setNextSelectedPositionInt",int.class);
        m.setAccessible(true);
        m.invoke(this,-1);
        final Method n = AdapterView.class.getDeclaredMethod(
                           "setSelectedPositionInt",int.class);
        n.setAccessible(true);
        n.invoke(this,-1);
    } 
    catch( Exception e ) {
        throw new RuntimeException(e);
    }
}
protected SpinnerAdapter newProxy(SpinnerAdapter obj) {
    return (SpinnerAdapter) java.lang.reflect.Proxy.newProxyInstance(
            obj.getClass().getClassLoader(),
            new Class[]{SpinnerAdapter.class},
            new SpinnerAdapterProxy(obj));
}
/**
 * Intercepts getView() to display the prompt if position < 0
 */
protected class SpinnerAdapterProxy implements InvocationHandler {
    protected SpinnerAdapter obj;
    protected Method getView;
    protected SpinnerAdapterProxy(SpinnerAdapter obj) {
        this.obj = obj;
        try {
            this.getView = SpinnerAdapter.class.getMethod(
                             "getView",int.class,View.class,ViewGroup.class);
        } 
        catch( Exception e ) {
            throw new RuntimeException(e);
        }
    }
    public Object invoke(Object proxy, Method m, Object[] args) throws Throwable {
        try {
            return m.equals(getView) && 
                   (Integer)(args[0])<0 ? 
                     getView((Integer)args[0],(View)args[1],(ViewGroup)args[2]) : 
                     m.invoke(obj, args);
        } 
        catch (InvocationTargetException e) {
            throw e.getTargetException();
        } 
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    protected View getView(int position, View convertView, ViewGroup parent) 
      throws IllegalAccessException {
        if( position<0 ) {
            final TextView v = 
              (TextView) ((LayoutInflater)getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE)).inflate(
                  android.R.layout.simple_spinner_item,parent,false);
            v.setText(getPrompt());
            return v;
        }
        return obj.getView(position,convertView,parent);
    }
 }
}
 
    
    
        Community
        
- 1
- 1
 
    
    
        Neal Ahluvalia
        
- 1,538
- 1
- 10
- 20
- 
                    the link may give the answer but what will happen if in future the link is not available... – Vishwajit Palankar Apr 28 '15 at 11:23
- 
                    I prefer not copying answer from someone's post, so i gave the link.Still for your satisfaction,Here is the edited answer @VishwajitPalankar :-) Cheers – Neal Ahluvalia Apr 28 '15 at 11:27
- 
                    If once an item is selected from the spinner and is it possible to undo it by selecting the hint – modabeckham Apr 28 '15 at 12:53
0
            
            
        Set a custom adapter for spinner
Declare  ArrayAdapter<String> adapter = null; as global
Setting adapter
String[] items = new String[] {"a", "b", "c"};
Spinner spinner = (Spinner) findViewById(R.id.mySpinner);
adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, items);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
Clear adapter where it need to make empty
adapter.clear();
 
    
    
        Asha Soman
        
- 1,846
- 1
- 18
- 28