Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android : Fill Spinner From Java Code Programmatically

How do you fill a spinner from java code programmatically?

I have a spinner in the layout like this:

 <Spinner      android:id="@+id/consultation_deseases"      android:layout_width="@dimen/bigSpinnerWidth"      android:layout_height="@dimen/bigSpinnerHeight"      android:prompt="@string/disease_prompt" /> 

With java code I need to create the adapter and add the items.

like image 814
Rana Osama Avatar asked Aug 12 '12 08:08

Rana Osama


2 Answers

// you need to have a list of data that you want the spinner to display List<String> spinnerArray =  new ArrayList<String>(); spinnerArray.add("item1"); spinnerArray.add("item2");  ArrayAdapter<String> adapter = new ArrayAdapter<String>(     this, android.R.layout.simple_spinner_item, spinnerArray);  adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); Spinner sItems = (Spinner) findViewById(R.id.spinner1); sItems.setAdapter(adapter); 

also to find out what is selected you could do something like this

String selected = sItems.getSelectedItem().toString(); if (selected.equals("what ever the option was")) { } 
like image 138
WIllJBD Avatar answered Oct 03 '22 23:10

WIllJBD


Here is an example to fully programmatically:

  • init a Spinner.
  • fill it with data via a String List.
  • resize the Spinner and add it to my View.
  • format the Spinner font (font size, colour, padding).
  • clear the Spinner.
  • add new values to the Spinner.
  • redraw the Spinner.

I am using the following class vars:

Spinner varSpinner; List<String> varSpinnerData;  float varScaleX; float varScaleY;     

A - Init and render the Spinner (varRoot is a pointer to my main Activity):

public void renderSpinner() {       List<String> myArraySpinner = new ArrayList<String>();      myArraySpinner.add("red");     myArraySpinner.add("green");     myArraySpinner.add("blue");           varSpinnerData = myArraySpinner;      Spinner mySpinner = new Spinner(varRoot);                     varSpinner = mySpinner;      ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, myArraySpinner);     spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down vieww     mySpinner.setAdapter(spinnerArrayAdapter); 

B - Resize and Add the Spinner to my View:

    FrameLayout.LayoutParams myParamsLayout = new FrameLayout.LayoutParams(             FrameLayout.LayoutParams.MATCH_PARENT,              FrameLayout.LayoutParams.WRAP_CONTENT);     myParamsLayout.gravity = Gravity.NO_GRAVITY;                   myParamsLayout.leftMargin = (int) (100 * varScaleX);     myParamsLayout.topMargin = (int) (350 * varScaleY);                  myParamsLayout.width = (int) (300 * varScaleX);;     myParamsLayout.height = (int) (60 * varScaleY);;       varLayoutECommerce_Dialogue.addView(mySpinner, myParamsLayout); 

C - Make the Click handler and use this to set the font.

    mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {          @Override         public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int myPosition, long myID) {              Log.i("renderSpinner -> ", "onItemSelected: " + myPosition + "/" + myID);              ((TextView) parentView.getChildAt(0)).setTextColor(Color.GREEN);             ((TextView) parentView.getChildAt(0)).setTextSize(TypedValue.COMPLEX_UNIT_PX, (int) (varScaleY * 22.0f) );             ((TextView) parentView.getChildAt(0)).setPadding(1,1,1,1);           }          @Override         public void onNothingSelected(AdapterView<?> parentView) {             // your code here         }      });  }    

D - Update the Spinner with new data:

private void updateInitSpinners(){       String mySelected = varSpinner.getSelectedItem().toString();      Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);        varSpinnerData.clear();       varSpinnerData.add("Hello World");      varSpinnerData.add("Hello World 2");       ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();      varSpinner.invalidate();      varSpinner.setSelection(1);  } 

}

What I have not been able to solve in the updateInitSpinners, is to do varSpinner.setSelection(0); and have the custom font settings activated automatically.

UPDATE:

This "ugly" solution solves the varSpinner.setSelection(0); issue, but I am not very happy with it:

private void updateInitSpinners(){      String mySelected = varSpinner.getSelectedItem().toString();     Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected);       varSpinnerData.clear();      ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(varRoot, android.R.layout.simple_spinner_item, varSpinnerData);     spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);      varSpinner.setAdapter(spinnerArrayAdapter);         varSpinnerData.add("Hello World");     varSpinnerData.add("Hello World 2");      ((BaseAdapter) varSpinner.getAdapter()).notifyDataSetChanged();     varSpinner.invalidate();     varSpinner.setSelection(0);  } 

}

Hope this helps......

like image 34
Al-Noor Ladhani Avatar answered Oct 03 '22 22:10

Al-Noor Ladhani