¿Es posible llenar las opciones de un Spinner directamente en el diseño xml? Esta página sugiere que debería usar un ArrayAdapter? Parece incómodo no poder hacerlo ...
¿Es posible llenar las opciones de un Spinner directamente en el diseño xml? Esta página sugiere que debería usar un ArrayAdapter? Parece incómodo no poder hacerlo ...
Respuestas:
No estoy seguro de esto, pero inténtalo.
En tu strings.xml define:
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>
En tu diseño:
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:entries="@array/array_name"
/>
Escuché que esto no siempre funciona en el diseñador, pero se compila bien.
drawSelectorOnTopya que no hay un selector separado que no sea el Spinner en sí. Sin embargo, la solución definitivamente funciona, ¡gracias!
android:entryValues. ListPreference lo admite.
Spinnery AbsSpinner. Tanto en API 19 como en 23, el constructor AbsSpinner hace uso de, R.styleable.AbsSpinner_entriespero en ninguna parte lo hace entryValues. Es solo una coincidencia que su código estaba haciendo lo que esperaba. (¿O tal vez las ROM de algunos fabricantes tienen una implementación Spinner personalizada que realmente maneja android:entryValues?)
Defina esto en su archivo String.xml y asigne un nombre a la matriz que desee, como "Peso"
<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>
y este código en tu layout.xml
<Spinner
android:id="@+id/fromspin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/Weight"
/>
En su archivo java, getActivityse usa en fragmentos; Si escribe ese código en la actividad, elimínelo 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;
}
Respecto al primer comentario: si haces esto, obtendrás un error (en Android Studio). Esto se refiere a que está fuera del espacio de nombres de Android. Si no sabe cómo solucionar este error, consulte el ejemplo a continuación. ¡Espero que esto ayude!
Ejemplo -Antes:
<string-array name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
Ejemplo - Después:
<string-array android:name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
string-arrayque tenga un nameatributo y no reconoce el android:nameuno.
android:entryValues="@array/array_name_values".