Android 如何在具有共享首选项的回收器视图上保存复选框
我有一个recycler视图,在recycler视图的行中,我有一个带有5个复选框的文本。 我的问题是每次我选中一个复选框时,共享首选项都会将所有复选框保存在同一位置 (编辑)示例:我选中第一行的复选框#2,并选中其他行的所有其他复选框#2。在我回到片段之后 这是我的适配器代码Android 如何在具有共享首选项的回收器视图上保存复选框,android,checkbox,android-recyclerview,sharedpreferences,Android,Checkbox,Android Recyclerview,Sharedpreferences,我有一个recycler视图,在recycler视图的行中,我有一个带有5个复选框的文本。 我的问题是每次我选中一个复选框时,共享首选项都会将所有复选框保存在同一位置 (编辑)示例:我选中第一行的复选框#2,并选中其他行的所有其他复选框#2。在我回到片段之后 这是我的适配器代码 public class HabitosAdapter extends RecyclerView.Adapter<HabitosAdapter.MyViewHolder> { private List
public class HabitosAdapter extends RecyclerView.Adapter<HabitosAdapter.MyViewHolder> {
private List<Habitos> mHabitosList;
private Fragment mFragment;
private Context mContext;
private CheckBox[] checkBoxes = new CheckBox[5];
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView nombre;
CardView habitosCardView;
CheckBox CB1, CB2, CB3, CB4, CB5 ;
public MyViewHolder(View itemView) {
super(itemView);
nombre = (TextView) itemView.findViewById(R.id.nombreHabito);
habitosCardView = itemView.findViewById(R.id.habitos_card_view);
CB1 = (CheckBox) itemView.findViewById(R.id.CBdia1);
CB2 = (CheckBox) itemView.findViewById(R.id.CBdia2);
CB3 = (CheckBox) itemView.findViewById(R.id.CBdia3);
CB4 = (CheckBox) itemView.findViewById(R.id.CBdia4);
CB5 = (CheckBox) itemView.findViewById(R.id.CBdia5);
}
}
public HabitosAdapter(Context mContext, List<Habitos> habitosList){
this.mContext = mContext;
this.mHabitosList = habitosList;
}
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.habitos_list_row, parent, false);
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
boolean valueBoolean = preferences.getBoolean("KEY", false);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("KEY", valueBoolean);
editor.commit();
return new MyViewHolder(itemView);
}
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position){
holder.nombre.setText(mHabitosList.get(position).getNombre());
holder.CB1.setChecked(getFromSP("CB1"));
holder.CB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB1", b);
}
});
holder.CB2.setChecked(getFromSP("CB2"));
holder.CB2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(holder.CB2.isChecked()){
saveInSp("CB2", true);
} else{
saveInSp("CB2", false);
}
}
});
holder.CB3.setChecked(getFromSP("CB3"));
holder.CB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB3", b);
}
});
holder.CB4.setChecked(getFromSP("CB4"));
holder.CB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB4", b);
}
});
holder.CB5.setChecked(getFromSP("CB5"));
holder.CB5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB5",b);
}
});
}
public int getItemCount(){
return mHabitosList.size();
}
private boolean getFromSP(String key) {
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean(key, false);
}
private void saveInSp(String key,boolean value){
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
}
public class MainActivity extends AppCompatActivity {
CheckBox CB1, CB2, CB3, CB4, CB5 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText courseTitleEditText = null;
CB1 = (CheckBox) findViewById(R.id.CBdia1);
CB2 = (CheckBox) findViewById(R.id.CBdia2);
CB3 = (CheckBox) findViewById(R.id.CBdia3);
CB4 = (CheckBox) findViewById(R.id.CBdia4);
CB5 = (CheckBox) findViewById(R.id.CBdia5);
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
boolean valueBoolean = preferences.getBoolean("KEY", false);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("KEY", valueBoolean);
editor.commit();
CB1.setChecked(getFromSP("CB1"+position));
CB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB1"+position, b);
}
});
CB2.setChecked(getFromSP("CB2"+position));
CB2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(CB2.isChecked()){
saveInSp("CB2"+position, true);
} else{
saveInSp("CB2"+position, false);
}
}
});
CB3.setChecked(getFromSP("CB3"+position));
CB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB3"+position, b);
}
});
CB4.setChecked(getFromSP("CB4"+position));
CB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB4"+position, b);
}
});
CB5.setChecked(getFromSP("CB5"+position));
CB5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB5"+position,b);
}
});
}
private boolean getFromSP(String key) {
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean(key, false);
}
private void saveInSp(String key,boolean value){
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
}
公共类HabitosAdapter扩展了RecyclerView.Adapter{
私人名单;
私人碎片;
私有上下文;
私有复选框[]复选框=新复选框[5];
公共类MyViewHolder扩展了RecyclerView.ViewHolder{
文本视图名称;
CardView习惯于CardView;
复选框CB1、CB2、CB3、CB4、CB5;
公共MyViewHolder(查看项目视图){
超级(项目视图);
nombre=(TextView)itemView.findViewById(R.id.nombreHabito);
habitosCardView=itemView.findViewById(R.id.habitos\u card\u视图);
CB1=(复选框)itemView.findViewById(R.id.CBdia1);
CB2=(复选框)itemView.findViewById(R.id.CBdia2);
CB3=(复选框)itemView.findViewById(R.id.CBdia3);
CB4=(复选框)itemView.findViewById(R.id.CBdia4);
CB5=(复选框)itemView.findViewById(R.id.CBdia5);
}
}
公共习惯用法适配器(上下文mContext、列表习惯用法列表){
this.mContext=mContext;
this.mHabitosList=习惯列表;
}
公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
View itemView=LayoutInflater.from(parent.getContext())
.充气(R.layout.habitos\u list\u行,父项,false);
SharedReferences preferences=mContext.getSharedReferences(“项目名称”,android.content.Context.MODE\u PRIVATE);
boolean valueBoolean=preferences.getBoolean(“KEY”,false);
SharedReferences.Editor=首选项.edit();
编辑器.putBoolean(“键”,valueBoolean);
commit();
返回新的MyViewHolder(itemView);
}
public void onBindViewHolder(@NonNull final MyViewHolder holder,final int position){
holder.nombre.setText(mHabitosList.get(position.getNombre());
holder.CB1.setChecked(getFromSP(“CB1”));
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
saveInSp(“CB1”,b);
}
});
holder.CB2.setChecked(getFromSP(“CB2”));
holder.CB2.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(holder.CB2.isChecked()){
saveInSp(“CB2”,真实);
}否则{
saveInSp(“CB2”,假);
}
}
});
holder.CB3.setChecked(getFromSP(“CB3”));
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
saveInSp(“CB3”,b);
}
});
holder.CB4.setChecked(getFromSP(“CB4”));
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
saveInSp(“CB4”,b);
}
});
holder.CB5.setChecked(getFromSP(“CB5”));
setOnCheckedChangeListener(新的CompoundButton.OnCheckedChangeListener(){
@凌驾
检查更改后的公共无效(复合按钮复合按钮,布尔b){
saveInSp(“CB5”,b);
}
});
}
public int getItemCount(){
返回mHabitosList.size();
}
私有布尔getFromSP(字符串键){
SharedReferences preferences=mContext.getSharedReferences(“项目名称”,android.content.Context.MODE\u PRIVATE);
返回preferences.getBoolean(key,false);
}
私有void saveInSp(字符串键,布尔值){
SharedReferences preferences=mContext.getSharedReferences(“项目名称”,android.content.Context.MODE\u PRIVATE);
SharedReferences.Editor=首选项.edit();
编辑器.putBoolean(键,值);
commit();
}
}
如何仅保存选中的复选框?
我知道我只需要选中特定的复选框,而不是在所有复选框上设置一个侦听器2,但我不知道如何确切地做到这一点,我正在开发我的第一个应用程序,因此感谢您的耐心。编辑为最终答案。
public class HabitosAdapter extends RecyclerView.Adapter<HabitosAdapter.MyViewHolder> {
private List<Habitos> mHabitosList;
private Fragment mFragment;
private Context mContext;
private CheckBox[] checkBoxes = new CheckBox[5];
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView nombre;
CardView habitosCardView;
CheckBox CB1, CB2, CB3, CB4, CB5 ;
public MyViewHolder(View itemView) {
super(itemView);
nombre = (TextView) itemView.findViewById(R.id.nombreHabito);
habitosCardView = itemView.findViewById(R.id.habitos_card_view);
CB1 = (CheckBox) itemView.findViewById(R.id.CBdia1);
CB2 = (CheckBox) itemView.findViewById(R.id.CBdia2);
CB3 = (CheckBox) itemView.findViewById(R.id.CBdia3);
CB4 = (CheckBox) itemView.findViewById(R.id.CBdia4);
CB5 = (CheckBox) itemView.findViewById(R.id.CBdia5);
}
}
public HabitosAdapter(Context mContext, List<Habitos> habitosList){
this.mContext = mContext;
this.mHabitosList = habitosList;
}
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.habitos_list_row, parent, false);
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
boolean valueBoolean = preferences.getBoolean("KEY", false);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("KEY", valueBoolean);
editor.commit();
return new MyViewHolder(itemView);
}
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position){
holder.nombre.setText(mHabitosList.get(position).getNombre());
holder.CB1.setChecked(getFromSP("CB1"));
holder.CB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB1", b);
}
});
holder.CB2.setChecked(getFromSP("CB2"));
holder.CB2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(holder.CB2.isChecked()){
saveInSp("CB2", true);
} else{
saveInSp("CB2", false);
}
}
});
holder.CB3.setChecked(getFromSP("CB3"));
holder.CB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB3", b);
}
});
holder.CB4.setChecked(getFromSP("CB4"));
holder.CB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB4", b);
}
});
holder.CB5.setChecked(getFromSP("CB5"));
holder.CB5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB5",b);
}
});
}
public int getItemCount(){
return mHabitosList.size();
}
private boolean getFromSP(String key) {
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean(key, false);
}
private void saveInSp(String key,boolean value){
SharedPreferences preferences = mContext.getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
}
public class MainActivity extends AppCompatActivity {
CheckBox CB1, CB2, CB3, CB4, CB5 ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText courseTitleEditText = null;
CB1 = (CheckBox) findViewById(R.id.CBdia1);
CB2 = (CheckBox) findViewById(R.id.CBdia2);
CB3 = (CheckBox) findViewById(R.id.CBdia3);
CB4 = (CheckBox) findViewById(R.id.CBdia4);
CB5 = (CheckBox) findViewById(R.id.CBdia5);
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
boolean valueBoolean = preferences.getBoolean("KEY", false);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("KEY", valueBoolean);
editor.commit();
CB1.setChecked(getFromSP("CB1"+position));
CB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB1"+position, b);
}
});
CB2.setChecked(getFromSP("CB2"+position));
CB2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(CB2.isChecked()){
saveInSp("CB2"+position, true);
} else{
saveInSp("CB2"+position, false);
}
}
});
CB3.setChecked(getFromSP("CB3"+position));
CB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB3"+position, b);
}
});
CB4.setChecked(getFromSP("CB4"+position));
CB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB4"+position, b);
}
});
CB5.setChecked(getFromSP("CB5"+position));
CB5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
saveInSp("CB5"+position,b);
}
});
}
private boolean getFromSP(String key) {
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean(key, false);
}
private void saveInSp(String key,boolean value){
SharedPreferences preferences = getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
}
公共类FireInfoAdapter扩展了RecyclerView.Adapter{
私有列表项=新的ArrayList();
私人监听;
私有布尔isMyValueChecked;
公共FireInfoAdapter(列表项、侦听器){
这个项目=项目;
this.listener=listener;
}
@非空
@凌驾
公共FireInfoViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.item\u fire\u base\u info,parent,false);
SharedReferences SharedReferences=view.getContext().getSharedReferences(“我的首选项”,Context.MODE\u PRIVATE);
isMyValueChecked=SharedReferences.getBoolean(“复选框”,false);
返回新的FireInfoViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull FireInfoViewHolder,int位置){
持有人。绑定(项目。获取(位置));
holder.itemCheckbox.setOnClickListener(视图->{
SharedReferences SharedReferences=view.getContext().ge