android - Spinner 上 setAdapter() 和 setDropDownViewResource() 之间的区别

标签 android spinner android-view android-adapter android-resources

我看了这个问题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_itemsetAdapter()

最佳答案

我看到了困惑。换句话说:“为什么我要向适配器的构造函数提供 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/

相关文章:

java - 等待两个旋转器都选择一个项目

java - Android:将按钮添加到 YouTubePlayerView

android - 当前 ViewAnimator 的新替代品是什么?

当网页响应错误状态时,Android webview onReceivedError() 不被调用

java - 创建表时出现 Android SqLite 异常

java - spinner.setAdapter() 中的 NullPointerException

java - 向微调器添加数据

java - RecyclerView中的setRecycledViewPool方法

java - BottomSheet 中带有多个 ViewHolder 的 Kotlin RecyclerView

java - Libgdx FreeTypeFontGenerator 不能在 android 上运行?