gpt4 book ai didi

java - 自定义微调适配器的 getDropDownView() 行为不一致

转载 作者:行者123 更新时间:2023-12-02 11:44:08 25 4
gpt4 key购买 nike

我创建了一个自定义微调器适配器,将自定义 View 应用于我所拥有的微调器的所选项目 View 和下拉 View 。这些的布局文件就是这样。

所选项目 View

<?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"/>

下拉 View

<?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)
}

但是,由于某种原因,除了第一个元素的样式之外,当前所选项目的下拉 View 也以相同的方式设置样式,就好像此代码为其运行一样。

我插入了断点,发现在打开微调器时运行 getDropDownView() 来生成微调器中的每个元素。上面提供的代码部分确实只运行一次 - 创建第一个元素时。

令我困惑的是,这个问题与所选项目的下拉 View 有关。我还将自定义样式应用于 getView() 中的第一个元素,这将创建微调器的选定项目 View 。虽然我对此 View 使用了不同的布局文件,但我运行了与上面的代码完全相同的检查,并且这种样式工作得很好。如果选择第一个元素,则它的 View 将被设置样式。如果选择任何其他元素,它的 View 完全没问题。

我尝试过应用不同的颜色,使用各种不同的检查来识别第一个元素,并切换布局。所选项目 View 仍然可以正常工作,下拉项目仍然有问题。

如果我从 getDropDownView() 中完全删除此代码,每个元素(包括所选元素)都会显示相同,因此没有其他代码在某处运行来修改所选项目的下拉 View 。我现在不知道问题是什么。

最佳答案

因为 View 是回收的,所以在下拉 View 中,第一个 View 会像预期的那样被修改,但是如果关闭并重新打开它,它可以在另一个位置使用相同的 View 。要解决这个问题,如果 View 位于第一个位置,则不能仅更改 View ,如果 View 不在第一个位置,则还需要将其更改回来,例如:

if (position == 0) {
name.setTextColor(name.getHintTextColors());
subtitle.setVisibility(GONE)
}
else {
name.setTextColor(name.regularColor());
subtitle.setVisibility(VISIBLE)
}

关于java - 自定义微调适配器的 getDropDownView() 行为不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48328374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com