Comment remplissez-vous un spinner du code java par programmation?
J’ai un spinner dans la mise en page comme ceci:
Avec le code Java, je dois créer l’adaptateur et append les éléments.
// you need to have a list of data that you want the spinner to display List spinnerArray = new ArrayList (); spinnerArray.add("item1"); spinnerArray.add("item2"); ArrayAdapter adapter = new ArrayAdapter ( 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);
aussi pour savoir ce qui est sélectionné, vous pouvez faire quelque chose comme ça
Ssortingng selected = sItems.getSelectedItem().toSsortingng(); if (selected.equals("what ever the option was")) { }
Voici un exemple de programmation complète:
J’utilise les classes vars suivantes:
Spinner varSpinner; List varSpinnerData; float varScaleX; float varScaleY;
A – Initie et rend le Spinner (varRoot est un pointeur sur mon activité principale):
public void renderSpinner() { List myArraySpinner = new ArrayList (); myArraySpinner.add("red"); myArraySpinner.add("green"); myArraySpinner.add("blue"); varSpinnerData = myArraySpinner; Spinner mySpinner = new Spinner(varRoot); varSpinner = mySpinner; ArrayAdapter spinnerArrayAdapter = new ArrayAdapter (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 – Redimensionnez et ajoutez le Spinner à ma vue:
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 – Créez le gestionnaire de clics et utilisez-le pour définir la police.
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 – Mettre à jour le Spinner avec de nouvelles données:
private void updateInitSpinners(){ Ssortingng mySelected = varSpinner.getSelectedItem().toSsortingng(); 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); }
}
Ce que je n’ai pas pu résoudre dans updateInitSpinners, c’est de faire varSpinner.setSelection (0); et avoir les parameters de police personnalisés activés automatiquement.
METTRE À JOUR:
Cette solution “moche” résout le varSpinner.setSelection (0); problème, mais je ne suis pas très content:
private void updateInitSpinners(){ Ssortingng mySelected = varSpinner.getSelectedItem().toSsortingng(); Log.i("TPRenderECommerce_Dialogue -> ", "updateInitSpinners -> mySelected: " + mySelected); varSpinnerData.clear(); ArrayAdapter spinnerArrayAdapter = new ArrayAdapter (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); }
}
J’espère que cela t’aides……