Мне нужно сохранить с sharedPreferences состояние переключателя (вкл / выкл).Переключатель внутри listiview, который находится внутри фрагмента.В адаптере у меня есть setOnCheckedChangeListener
для переключателя, просто чтобы изменить цвет фона каждого элемента в списке.Проблема в том, что я не хочу использовать sharedPreferences внутри адаптера класса (я не думаю, что это хорошая практика).Внутри FragmentReport я написал метод для загрузки и сохранения состояния.
Это метод внутри «FragmentReport»:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.report_fragment, container, false);
final ListView listView = rootView.findViewById(R.id.report_lv);
final View childView =
getActivity().getLayoutInflater().inflate(R.layout.report_list_view, null);
paidCard = childView.findViewById(R.id.paid_cardview);
paidSwitch = childView.findViewById(R.id.paid_switch);
.......
public void load_switch_state(){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
paidSwitch.setChecked(sharedPreferences.getBoolean("switch_check", true));
if (paidSwitch.isChecked()) {
// Set green background
paidCard.setCardBackgroundColor(Color.parseColor("#FF2E7D32"));
}
}
public void save_switch_state(Switch paidSwitch){
SharedPreferences sharedPreferences = getActivity().getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("switch_check", paidSwitch.isChecked());
Log.v("saved", String.valueOf(paidSwitch.isChecked()));
editor.apply();
}
Затем в моем «ReportAdapter» это метод getView:
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.report_list_view, null);
TextView debtor = convertView.findViewById(R.id.debtor_tv);
TextView receiver = convertView.findViewById(R.id.receiver);
TextView difference = convertView.findViewById(R.id.difference_tv);
final CardView paidCard = convertView.findViewById(R.id.paid_cardview);
final Switch paidSwitch = convertView.findViewById(R.id.paid_switch);
debtor.setText(debtorArray.get(position));
receiver.setText(receiverArray.get(position));
difference.setText(String.valueOf(differenceArray.get(position) + "€"));
fragment.load_switch_state();
paidSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked){
// Set green background
paidCard.setCardBackgroundColor(Color.parseColor("#FF2E7D32"));
}
else{
// Set blue background
paidCard.setCardBackgroundColor(Color.parseColor("#FF3F51B5"));
}
fragment.save_switch_state(paidSwitch);
}
});
return convertView;
Метод сохранения печатает "сохранено", но метод загрузки ничего не делает.Может быть, мне нужно передать позицию зрения?Это изображение приложения:
report_list_view.xml содержит переключатель с идентификатором paid_switch report_fragment.xml содержит представление списка