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

时间:2018-12-10 19:33:26

标签: java android

我有一个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。在此处张贴一些照片时,如何减小照片的尺寸(屏幕尺寸)? enter image description here

2 个答案:

答案 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"));