如果我使用ArrayAdapter或使用android:entries分配一些项目,它会有什么不同? 我将面临哪些与Spinner功能相关的缺点?
使用android:entries
添加元素<Spinner
android:id="@+id/edu"
android:layout_width="211dp"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginStart="30dp"
android:layout_marginTop="30dp"
android:entries="@array/education"
android:drawSelectorOnTop="true" />"
使用ArrayAdapter添加项目:
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.edu));
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
education_2.setAdapter(arrayAdapter);
答案 0 :(得分:1)
android:entries
是一个静态字符串XML列表。您无法通过Java代码更新Spinner内容。同样地,(也许我忘记了属性,但是)在Java代码中,您可以使用与android.R.layout.simple_list_item_1
不同的布局
如果您的应用程序不需要这样做,那么没有任何缺点,因为您已经将XML粗略地翻译成相同的Java代码。
答案 1 :(得分:0)
如果您对如何使用XML属性感到好奇,那么Android源代码就是您的朋友。您可以看到Spinner
扩展AbsSpinner
并且具有如下定义的构造函数:
public AbsSpinner(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
initAbsSpinner();
final TypedArray a = context.obtainStyledAttributes(
attrs, R.styleable.AbsSpinner, defStyleAttr, defStyleRes);
final CharSequence[] entries = a.getTextArray(R.styleable.AbsSpinner_entries);
if (entries != null) {
final ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
context, R.layout.simple_spinner_item, entries);
adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item);
setAdapter(adapter);
}
a.recycle();
}
如您所见,代码检查是否设置了entries
属性,如果是,则创建默认ArrayAdapter<CharSequence>
以显示给定的字符串集。
所以,回答你的问题:
如果我使用数组适配器分配项目或使用构建android:entries?
,会有什么不同
如果你只是需要显示一个字符串列表,那真的没什么区别。如果您只需要在默认的微调框视图中显示字符串列表而无需其他自定义,则entries
属性是便利。
我将面临哪些与微调器功能相关的缺点?
功能没有区别 - 它仍然是字符串的微调器。但是您无法在微调器中自定义视图的项目类型或样式。因此,如果您需要不同的布局或更多自定义项目的显示方式,您可以编写额外的代码来创建和设置自己的适配器。
希望有所帮助!