如何解决自定义主题不适用于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 举报,一经查实,本站将立刻删除。