我知道已经询问并回答here和here。我试过了两个,但没有一个适合我。
我有一个喜欢的按钮,如果按下它我会在database
中将项目设置为收藏夹并替换toggle button
的图像,反之亦然。我是这样做的:
<ToggleButton
android:id="@+id/btnFavorite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn=""
android:textOff=""
android:layout_marginRight="5dp"
android:background="@drawable/favorite_btn_style" />
这是我的favorite_btn_style.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/favourit_blue_btn" android:state_checked="true"/>
<!-- pressed -->
<item android:drawable="@drawable/favourit_dark_btn"/>
<!-- default/unchecked -->
</selector>
在oncreate
我检查项目是否已设置为收藏,然后setchecked
设置为true
:
if (movieObj.getIsFav().intValue() == 1) {
btnFav.setChecked(true);
}
这是按钮上的onclicklistener
:
btnFav.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (!btnFav.isChecked()) {
btnFav.setChecked(true);
// set favorite
dbHelper.updateMovieFavorite(movieObj.getId().intValue(), 1);
} else {
btnFav.setChecked(false);
// set favorite
dbHelper.updateMovieFavorite(movieObj.getId().intValue(), 0);
}
}
});
函数被调用,执行正常,但图像没有变化。我做错了什么?
答案 0 :(得分:1)
在OnClick方法中删除btnFav.setChecked(true)
和btnFav.setChecked(false)
。它是一个togglebutton,它可以通过每次单击自动切换setChecked,然后将其重置为旧值。因此,在您的情况下,它始终具有相同的值(起始值)
我建议您使用setOnCheckedChangeListener
代替onClickListener
。
答案 1 :(得分:0)
在res / drawable文件夹中创建一个文件button_toggle.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="false"
android:drawable="@drawable/ic_slide_switch_off" />
<item
android:state_checked="true"
android:drawable="@drawable/ic_slide_switch_on" />
</selector>
答案 2 :(得分:0)
尝试使用 android:button =“@ drawable / favorite_btn_style”和 android:background =“@ android:color / transparent”组合。要自定义复选框,收音机和切换按钮,您应该使用android:按钮而不是android:background。