我看了这个问题Difference between android.R.layout.simple_spinner_dropdown_item and android.R.layout.simple_spinner_item ,但找不到我的问题的答案。
我可以看到 simple_spinner_item 和 simple_spinner_dropdown_item 之间存在差异。但为什么我需要同时设置它们呢? Spinner 布局的哪一部分由 setAdapter() (simple_spinner_item )
中设置的布局控制以及 setDropDownViewResource() (simple_spinner_dropdown_item)
中按布局设置的哪一个?
现在我不明白为什么我不能做相反的事情:将 simple_spinner_item 与 setDropDownViewResource()
一起使用和simple_spinner_dropdown_item
与 setAdapter()
?
最佳答案
我看到了困惑。换句话说:“为什么我要向适配器的构造函数提供 android.R.layout.simple_spinner_item
?它是如何使用的?”
布局资源,提供给适配器的构造函数 is used测量微调器行项目的 View 。从 AbsSpinner#onMeasure()
调用 mAdapter.getView()
,最终 uses mResource
(资源 ID,从构造函数传递到适配器)以膨胀 View 。
另一方面,mDropDownResource
is used膨胀 Spinner
的每一行。
请注意,如果您没有显式提供 mDropDownResource
,则它默认为适配器构造函数中提供的 mResource
。
public ArrayAdapter(@NonNull Context context, @LayoutRes int resource,
@IdRes int textViewResourceId, @NonNull List<T> objects) {
...
mResource = mDropDownResource = resource;
...
}
关于android - Spinner 上 setAdapter() 和 setDropDownViewResource() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45128935/