1

I searched for a solution to avoid the automatic selection on a dynamically created spinner. I found that link: Spinner onItemSelected() executes when it is not suppose to

But I can't get it work on my code:

private void populateSpinner() {
        //Spinner spinnerKostenstellen;
        //spinnerKostenstellen = (Spinner) findViewById(R.id.spinner2);
        //spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2);

        AlertDialog.Builder adb2 = new AlertDialog.Builder(this);
        LayoutInflater adbInflater2 = LayoutInflater.from(this);
        View SpinnerLayout = adbInflater2.inflate(R.layout.spinner, null);
        adb2.setView(SpinnerLayout);
        adb2.setTitle("Kostenstelle auswählen:");
        spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2);
        spinnerKostenstellen.setSelection(1, false);
        spinnerKostenstellen.setOnItemSelectedListener(this);
        //spinnerKostenstellen.setCallbackDuringFling(false);
        List<String> lables = new ArrayList<String>();

        for (int i = 0; i < kostenstellenList.size(); i++) {
            lables.add(kostenstellenList.get(i).getKst());
        }

        // Creating adapter for spinner
        //ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);

        //ArrayAdapter<String> kostenstellenList = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);
        ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, lables);
        // Drop down layout style - list view with radio button
        spinnerAdapter
                .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner
        spinnerKostenstellen.setAdapter(spinnerAdapter);
        adb2.show();  
    }
Community
  • 1
  • 1
hevilp
  • 57
  • 1
  • 1
  • 7

2 Answers2

0

(EDIT) below code hide first blank value from the spinner

List<String> urlist = new ArrayList<String>();
urlist.add("");   //  Initial dummy entry
urlist.add("yourstring1");
urlist.add("yourstring2");
urlist.add("yorustring3");


ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, urlist) {
    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent)
    {
        View v = null;

        // If this is the initial blnk 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);
        }

        return v;
    }
};

dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);
  • 1
    The method setSelection(int) in the type AbsSpinner is not applicable for the arguments (String) – hevilp Feb 05 '15 at 17:00
  • when you get the arraylist of item then insert a blank item at any position by yourself and the in setSelection(yourcustomaddedposition). –  Feb 05 '15 at 17:08
  • And in adapter you can put the condition like if( (item != null) && ( position == yourcustomaddedposition)) { row.setVisibility(View.GONE); } else { row.setVisibility(View.VISIBLE); } –  Feb 05 '15 at 17:09
  • i have now added a blank item, but it still automatically selects the blank item and goes on with the code – hevilp Feb 05 '15 at 18:09
  • I update my code above please , check, hopefully this will help you. –  Feb 06 '15 at 19:11
0

Try changing your OnItemSelectedListener to be set after the dialog is shown (which is also after the adapter is set). This should prevent the spinner from firing its listener before the user chooses something. YOURCLASSNAME would be whatever the name of your current class this code lives in.

private void populateSpinner() {
    //Spinner spinnerKostenstellen;
    //spinnerKostenstellen = (Spinner) findViewById(R.id.spinner2);
    //spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2);

    AlertDialog.Builder adb2 = new AlertDialog.Builder(this);
    LayoutInflater adbInflater2 = LayoutInflater.from(this);
    View SpinnerLayout = adbInflater2.inflate(R.layout.spinner, null);
    adb2.setView(SpinnerLayout);
    adb2.setTitle("Kostenstelle auswählen:");
    spinnerKostenstellen = (Spinner) SpinnerLayout.findViewById(R.id.spinner2);
    spinnerKostenstellen.setSelection(1, false);
    //spinnerKostenstellen.setCallbackDuringFling(false);
    List<String> lables = new ArrayList<String>();

    for (int i = 0; i < kostenstellenList.size(); i++) {
        lables.add(kostenstellenList.get(i).getKst());
    }

    // Creating adapter for spinner
    //ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);

    //ArrayAdapter<String> kostenstellenList = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, lables);
    // Drop down layout style - list view with radio button
    spinnerAdapter
        .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    // attaching data adapter to spinner
    spinnerKostenstellen.setAdapter(spinnerAdapter);
    // use .create to get the AlertDialog 
    AlertDialog dialog =  adb2.create();
    // set an OnShowListener
    dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            spinnerKostenstellen.setOnItemSelectedListener(YOURCLASSNAME.this);
        }
    });
    dialog.show();
}
petey
  • 16,914
  • 6
  • 65
  • 97