Est-il possible de remplir les options d'un Spinner directement dans la mise en page xml? Cette page suggère que je devrais utiliser un ArrayAdapter? Il semble maladroit de ne pas pouvoir le faire ..
Est-il possible de remplir les options d'un Spinner directement dans la mise en page xml? Cette page suggère que je devrais utiliser un ArrayAdapter? Il semble maladroit de ne pas pouvoir le faire ..
Réponses:
Je ne suis pas sûr de cela, mais essayez-le.
Dans votre strings.xml, définissez:
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>
Dans votre mise en page:
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:entries="@array/array_name"
/>
J'ai entendu dire que cela ne fonctionne pas toujours sur le concepteur, mais cela se compile bien.
drawSelectorOnTop
car il n'y a pas de sélecteur séparé autre que le Spinner lui-même. La solution fonctionne certainement, merci!
android:entryValues
. ListPreference le prend en charge.
Spinner
et AbsSpinner
. Sur les API 19 et 23, le constructeur AbsSpinner utilise, R.styleable.AbsSpinner_entries
mais il n'utilise nulle part entryValues
. Ce n'est qu'une coïncidence si votre code faisait ce que vous attendiez. (Ou peut-être que les ROM de certains fabricants ont une implémentation Spinner personnalisée qui gère réellement android:entryValues
?)
Définissez-le dans votre fichier String.xml et nommez le tableau comme vous le souhaitez, par exemple "Weight"
<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>
et ce code dans votre layout.xml
<Spinner
android:id="@+id/fromspin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/Weight"
/>
Dans votre fichier java, getActivity
est utilisé en fragment; si vous écrivez ce code dans l'activité, supprimez-le getActivity
.
a = (Spinner) findViewById(R.id.fromspin);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this.getActivity(),
R.array.weight, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
a.setAdapter(adapter);
a.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (a.getSelectedItem().toString().trim().equals("Kilogram")) {
if (!b.getText().toString().isEmpty()) {
float value1 = Float.parseFloat(b.getText().toString());
float kg = value1;
c.setText(Float.toString(kg));
float gram = value1 * 1000;
d.setText(Float.toString(gram));
float carat = value1 * 5000;
e.setText(Float.toString(carat));
float ton = value1 / 908;
f.setText(Float.toString(ton));
}
}
public void onNothingSelected(AdapterView<?> parent) {
// Another interface callback
}
});
// Inflate the layout for this fragment
return v;
}
En ce qui concerne le premier commentaire: Si vous faites cela, vous obtiendrez une erreur (dans Android Studio). Cela concerne le fait qu'il soit hors de l'espace de noms Android. Si vous ne savez pas comment corriger cette erreur, consultez l'exemple ci-dessous. J'espère que cela t'aides!
Exemple -avant:
<string-array name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
Exemple - Après:
<string-array android:name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
string-array
qu'il ait un name
attribut et ne reconnaît pas celui- android:name
ci.
android:entryValues="@array/array_name_values"
.