How to set Spinner default value to null?

后端 未结 10 1645
天命终不由人
天命终不由人 2020-11-29 02:36

I\'m trying to get a Spinner to load up with no selected value. Once the user selects a value it then takes them to another page.

This is proving to be a problem be

相关标签:
10条回答
  • 2020-11-29 03:18

    In my case, although size '2' is displayed in the spinner, nothing happens till some selection is done!

    I have an xml file (data_sizes.xml) which lists all the spinner values.

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="chunks">
            <item>2</item>
            <item>4</item>
            <item>8</item>
            <item>16</item>
            <item>32</item>
        </string-array>
    </resources>    
    

    In main.xml file: Spinner element

    <Spinner android:id="@+id/spinnerSize"  
    android:layout_marginLeft="50px"
    android:layout_width="fill_parent"                  
    android:drawSelectorOnTop="true"
    android:layout_marginTop="5dip"
    android:prompt="@string/SelectSize"
    android:layout_marginRight="30px"
    android:layout_height="35px" /> 
    

    Then in my java code, I added:

    In my activity: Declaration

    Spinner spinnerSize;
    ArrayAdapter adapter;
    

    In a public void function - initControls(): Definition

    spinnerSize = (Spinner)findViewById(R.id.spinnerSize);
    adapter = ArrayAdapter.createFromResource(this, R.array.chunks, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerSize.setAdapter(adapter);
    spinnerSize.setOnItemSelectedListener(new MyOnItemSelectedListener());
    

    My spinner listener:

    /* Spinner Listener */

    class MyOnItemSelectedListener implements OnItemSelectedListener {
    
        public void onItemSelected(AdapterView<?> parent,
            View view, int pos, long id) {
            chunkSize = new Integer(parent.getItemAtPosition(pos).toString()).intValue();
        }
        public void onNothingSelected(AdapterView<?> parent) {
          // Dummy
        }
    }
    
    0 讨论(0)
  • 2020-11-29 03:23

    Merge this:

    private long previousItemId = 0;
    
    @Override
    public long getItemId(int position) {
        long nextItemId = random.nextInt(Integer.MAX_VALUE);
        while(previousItemId == nextItemId) {
            nextItemId = random.nextInt(Integer.MAX_VALUE);
        }
        previousItemId = nextItemId;
        return nextItemId;
    }
    

    With this answer:

    public class SpinnerInteractionListener
            implements AdapterView.OnItemSelectedListener, View.OnTouchListener {
    
        private AdapterView.OnItemSelectedListener onItemSelectedListener;
    
        public SpinnerInteractionListener(AdapterView.OnItemSelectedListener selectedListener) {
            this.onItemSelectedListener = selectedListener;
        }
    
        boolean userSelect = false;
    
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            userSelect = true;
            return false;
        }
    
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if(userSelect) {
                onItemSelectedListener.onItemSelected(parent, view, pos, id);
                userSelect = false;
            }
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            if(userSelect) {
                onItemSelectedListener.onNothingSelected(parent);
                userSelect = false;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-29 03:27

    My solution, in case you have a TextView as each row of the spinner:

        // TODO: add a fake item as the last one of "items"
        final ArrayAdapter<String> adapter=new ArrayAdapter<String>(..,..,items) 
          {
          @Override
          public View getDropDownView(final int position,final View convertView,final ViewGroup parent)
            {
            final View dropDownView=super.getDropDownView(position,convertView,parent);
            ((TextView)dropDownView.findViewById(android.R.id.text1)).setHeight(position==getCount()-1?0:getDimensionFromAttribute(..,R.attr.dropdownListPreferredItemHeight));
            dropDownView.getLayoutParams().height=position==getCount()-1?0:LayoutParams.MATCH_PARENT;
            return dropDownView;
            }
          }
    
        ...
        spinner.setAdapter(adapter);
        _actionModeSpinnerView.setSelection(dataAdapter.getCount()-1,false);
    
    
    
      public static int getDimensionFromAttribute(final Context context,final int attr)
        {
        final TypedValue typedValue=new TypedValue();
        if(context.getTheme().resolveAttribute(attr,typedValue,true))
          return TypedValue.complexToDimensionPixelSize(typedValue.data,context.getResources().getDisplayMetrics());
        return 0;
        }
    
    0 讨论(0)
  • 2020-11-29 03:28

    Using a custom spinner layout like this:

    <?xml version="1.0" encoding="utf-8"?>
    <Spinner xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/spinnerTarget"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:textSize="14dp"         
              android:textColor="#000000"/>
    

    In the activity:

        // populate the list
        ArrayList<String> dataList = new ArrayList<String>();
        for (int i = 0; i < 4; i++) {
            dataList.add("Item");
        }
    
        // set custom layout spinner_layout.xml and adapter
        Spinner spinnerObject = (Spinner) findViewById(R.id.spinnerObject);
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, R.drawable.spinner_layout, dataList);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerObject.setAdapter(dataAdapter);
        spinnerObject.setOnTouchListener(new View.OnTouchListener() { 
    
            public boolean onTouch(View v, MotionEvent event) {
                // to set value of first selection, because setOnItemSelectedListener will not dispatch if the user selects first element
                TextView spinnerTarget = (TextView)v.findViewById(R.id.spinnerTarget);
                spinnerTarget.setText(spinnerObject.getSelectedItem().toString());
    
                return false;
            }
    
        });
        spinnerObject.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    private boolean selectionControl = true;
    
                    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                        // just the first time
                        if(selectionControl){
    
                            // find TextView in layout 
                            TextView spinnerTarget = (TextView)parent.findViewById(R.id.spinnerTarget);
                            // set spinner text empty
                            spinnerTarget.setText("");
                            selectionControl = false;
                        }
                        else{
                            // select object
                        }
                    }
    
                    public void onNothingSelected(AdapterView<?> parent) {
    
                    }
                });
    
    0 讨论(0)
提交回复
热议问题