Java Android cardview,使用切换监听器更改背景颜色

Java Android cardview,使用切换监听器更改背景颜色,java,android,Java,Android,我有一个内置开关的cardview。当开关打开时,我想将卡的背景颜色更改为绿色,当开关关闭时(默认情况下为红色),则为红色。 我还需要在本地保存开关状态,因此当我再次打开应用程序时,它将保持在上次的位置。 我不知道在适配器中执行所有代码是否合适..我使用的是2个片段,而cardview在其中一个片段中,在listview中。 我想我必须使用 //paidSwitch是cardview中的开关 paidSwitch.setOnCheckedChangeListener(新的CompoundButt

我有一个内置开关的cardview。当开关打开时,我想将卡的背景颜色更改为绿色,当开关关闭时(默认情况下为红色),则为红色。 我还需要在本地保存开关状态,因此当我再次打开应用程序时,它将保持在上次的位置。 我不知道在适配器中执行所有代码是否合适..我使用的是2个片段,而cardview在其中一个片段中,在listview中。 我想我必须使用

//paidSwitch是cardview中的开关
paidSwitch.setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮视图,布尔值已检查){
paidCard.setCardBackgroundColor(??我需要在这里获取我的R.color.green值);

此代码位于适配器类中的getView方法内。 列表中的每个cardview都有自己的开关。我附上了片段的图片,这样更容易理解。 注:当我在这里发布一些照片时,我如何减小图片的大小(屏幕大小)?

这应该可以:

    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"

希望这有助于在本地保存状态,您可以使用SharedReferences或library。我个人更喜欢纸张

你可以这样使用它

//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);
paidSwitchAtPosition.setChecked(Paper.book().read("position"));
这种读取开关状态和设置的逻辑可以在onResume中实现(如果需要,也可以在onCreate中实现),如下所示

paidSwitchAtPosition.setChecked(Paper.book().read("position"));

“当我在此处发布一些照片时,如何减小图片的大小(屏幕大小)-。除此之外,你到底在问什么?谢谢你的链接。我在问如何使用开关更改我的cardview的背景色。我只是尝试了一下,但它没有改变颜色。可能是因为我没有传递列表的任何位置。如果我写cardview.setCardBackgroundColor(color.green(position)),它会变为灰色(我不知道为什么,但至少它会改变)我在更改CardView的背景颜色时遇到问题,通常我会在需要更改颜色的卡的特定区域上实现布局,然后设置BackgroundColorLayout@Nicola尝试设置静态颜色并查看它是否更改
cardView.setCardBackgroundColor(color.RED)
@B.M我理解这个问题……我在xml文件中设置了背景色,但颜色开关不起作用。我还需要了解一件事……如果我不能使用xml设置默认颜色,我该怎么办?@Nicola不确定我是否理解了这个问题,但可以使用
color
类中可用的所有静态颜色,例如:
Color.red
Color.green
.etc,就像我上面评论的例子一样