我有一个Cardview,里面有一个开关。当开关打开时,我想将卡的背景颜色更改为绿色,当它关闭时(默认为)改为红色。 我还需要将开关状态保存在本地,因此当我再次打开应用程序时,它保持在原来的位置。 我不知道是否可以在适配器中完成所有代码。.我正在使用2个片段,而cardview位于其中一个列表视图中。 我想我必须使用
// paidSwitch is the switch in the cardview
paidSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
paidCard.setCardBackgroundColor(??? I need to get my R.color.green value here);
此代码在适配器类的getView方法内部。 列表中的每个cardview都有其自己的开关。我附上碎片的图片,因此更容易理解。 ps。在此处张贴一些照片时,如何减小照片的尺寸(屏幕尺寸)?
答案 0 :(得分:1)
这应该有效:
final int greenBackgroundColor = ContextCompat.getColor(this, R.color.my_red_color);
final int redBackgroundColor = ContextCompat.getColor(this, R.color.my_green_color);
switch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (b){
cardView.setCardBackgroundColor(greenBackgroundColor);
}
else{
cardView.setCardBackgroundColor(redBackgroundColor);
}
}
});
并使用设置默认的卡片背景:
app:cardBackgroundColor="@color/white"
希望这会有所帮助
答案 1 :(得分:0)
要在本地保存状态,可以使用SharedPrefrences或Paper库。我个人更喜欢Paper。
您可以像这样使用它
//Init Paper
Paper.init(this);
//save switch state
Paper.book().write("key1", "value1");
Paper.book().write("key2", "value2");
// key being the switch Indentifier, value being the state of the specific switch
//save switch state
String value1 = Paper.book().read("key1");
String value2= Paper.book().read("key2");
//delete all saved record
Paper.book().destroy();
编辑-
这种保存状态的逻辑可以在onCheckedChanged的if-else之后实现,就像这样
if (isChecked){
//line of code to change color
...
}
else{
//line of code to change color
...
}
//line of code to save state
Paper.book().write("position", isChecked);
这种读取状态并设置开关的逻辑可以在onResume中实现(如果需要,也可以在onCreate中实现)
paidSwitchAtPosition.setChecked(Paper.book().read("position"));