Чи можливо заповнити параметри Spinner прямо у макеті xml? Ця сторінка підказує, що я повинен використовувати ArrayAdapter? Здається незручно не в змозі це зробити ..
Чи можливо заповнити параметри Spinner прямо у макеті xml? Ця сторінка підказує, що я повинен використовувати ArrayAdapter? Здається незручно не в змозі це зробити ..
Відповіді:
Я не впевнений у цьому, але пострілюйте.
У вашому strings.xml визначте:
<string-array name="array_name">
<item>Array Item One</item>
<item>Array Item Two</item>
<item>Array Item Three</item>
</string-array>
У вашому макеті:
<Spinner
android:id="@+id/spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:entries="@array/array_name"
/>
Я чув, що це не завжди працює на дизайнера, але це прекрасно.
drawSelectorOnTopоскільки немає іншого вибору, крім самого Spinner. Але рішення, безумовно, працює, дякую!
android:entryValues. ListPreference підтримує його.
Spinnerта AbsSpinner. І в API 19 і 23 конструктор AbsSpinner використовує, R.styleable.AbsSpinner_entriesале ніде їх не використовує entryValues. Це лише збіг обставин, що ваш код робив те, що ви очікували. (Або, можливо, у ПЗУ деяких виробників є спеціальна реалізація Spinner, яка насправді обробляє android:entryValues?)
Визначте це у вашому файлі String.xml та назвіть масив, який ви хочете, наприклад "Вага"
<string-array name="Weight">
<item>Kg</item>
<item>Gram</item>
<item>Tons</item>
</string-array>
і цей код у вашому layout.xml
<Spinner
android:id="@+id/fromspin"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:entries="@array/Weight"
/>
У вашому файлі java getActivityвикористовується в фрагменті; якщо ви пишете цей код у активності, тоді видаліть 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;
}
Що стосується першого коментаря: якщо ви це зробите, ви отримаєте помилку (в Android Studio). Це стосується того, що він знаходиться поза простором імен Android. Якщо ви не знаєте, як виправити цю помилку, перегляньте приклад нижче. Сподіваюсь, це допомагає!
Приклад -Перед:
<string-array name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
Приклад - Після:
<string-array android:name="roomSize">
<item>Small(0-4)</item>
<item>Medium(4-8)</item>
<item>Large(9+)</item>
</string-array>
string-arrayщоб він мав nameатрибут, а не розпізнає його android:name.
android:entryValues="@array/array_name_values".