微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

自定义主题不适用于android listview的第一个SwitchCompat项

如何解决自定义主题不适用于android listview的第一个SwitchCompat项

我有一个列表视图,其中每个项目都包含一个具有自定义开关样式的switchcompat小部件。 第一次填充listview时,自定义主题未应用于列表中第一项的switchcompat小部件。但是第二次填充列表时,它工作正常(清除并重新填充列表适配器)

<androidx.appcompat.widget.SwitchCompat
android:id="@+id/switch_manage_reward_active"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:checked="false"
android:text="active"
android:textAlignment="center"
android:textAllCaps="false"
android:textColor="#fff"
android:theme="@style/RewardSwitch" />

<style name="RewardSwitch" parent="Theme.AppCompat.Light">
        <item name="colorControlActivated">#E6E329</item>
        <item name="colorSwitchThumbnormal">#f1f1f1</item>
        <item name="android:colorForeground">#ffcccccc</item>
</style>

@Override
public View getView(int position,View convertView,ViewGroup parent) {
    ViewHolder v;
    if (convertView == null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        convertView = inflater.inflate(R.layout.manage_reward_item,null);
        v = new ViewHolder();
        v.switchRewardStatus = (SwitchCompat) convertView
                .findViewById(R.id.switch_manage_reward_active);
        convertView.setTag(v);
    } else {
        v = (ViewHolder) convertView.getTag();
    }
    final Reward currentReward = getItem(position);
    v.switchRewardStatus.setChecked(currentReward.getActive());
    return convertView;
}

SEE SCREENSHOT switchcompat list item

解决方法

因为您使用null父参数来充气

convertView = inflater.inflate(R.layout.manage_reward_item,null);

相反,您应该使用父参数进行充气,该参数包含有关主题的信息:

convertView = inflater.inflate(R.layout.manage_reward_item,parent,false);
,

尝试recreate活动。我这样做是为了将主题更改为黑暗主题

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。