【发布时间】:2018-01-18 18:50:59
【问题描述】:
我创建了一个自定义微调器适配器,以将自定义视图应用于我拥有的微调器的选定项目视图和下拉视图。这些的布局文件就是这样。
选中的项目视图
<?xml version="1.0" encoding="utf-8"?>
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerItem"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:textAppearance="@style/StandardText"
android:gravity="center"/>
下拉视图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/firingcycleSpinnerItem"
style="?android:attr/spinnerDropDownItemStyle"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp"
android:gravity="center">
<CheckedTextView
android:id="@+id/firingcycleName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/SubtitleText"
android:layout_gravity="center_vertical|left"
/>
<TextView
android:id="@+id/firingcycleSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/SmallText"
android:layout_gravity="center_vertical|left"
android:layout_marginTop="8dp"
/>
</LinearLayout>
在getDropDownView() 方法中,我尝试使用下面的代码对第一个下拉项设置不同的样式。
if (position == 0) {
name.setTextColor(name.getHintTextColors());
subtitle.setVisibility(GONE)
}
但是,由于某种原因,除了设置第一个元素的样式外,当前选定项的下拉视图也以相同的方式设置样式,就好像这段代码为其运行一样。
我已经插入了断点,并发现运行getDropDownView() 以在打开微调器时生成微调器中的每个元素。上面提供的代码部分确实只运行一次 - 在创建第一个元素时。
让我感到困惑的是,这个问题仅与所选项目的下拉视图有关。我还将自定义样式应用于getView() 中的第一个元素,它创建了微调器的选定项目视图。虽然我为此视图使用了不同的布局文件,但我运行与上面代码完全相同的检查,并且这种样式完美地工作。如果选择了第一个元素,则它的视图将被设置样式。如果选择了任何其他元素,它的视图完全没问题。
我尝试过应用不同的颜色,使用各种不同的检查来识别第一个元素,并切换布局。选中的item view依然完美,下拉item依然有问题。
如果我从getDropDownView() 中完全删除此代码,则每个元素(包括所选元素)看起来都相同,因此不会有其他代码在修改所选项目的下拉视图。我不知道此时可能是什么问题。
【问题讨论】: