Попытка сохранить состояние флажка и данных внутри этого флажка, даже когда приложение закрыто - PullRequest
0 голосов
/ 23 апреля 2020

Я создал флажок, который может выбрать только один флажок за раз. Это отлично работает. мое приложение требует, чтобы флажок оставался отмеченным всегда, даже когда приложение закрыто. То, что я хочу знать, это как получить флажок и данные, которые хранятся с помощью этого флажка, чтобы сохранить, даже если мое приложение закрыто. Я немного покопался и увидел, что вы можете использовать общие предпочтения, но я не могу понять, как реализовать их в моем приложении. Вот код, который я в настоящее время использую для установки флажка: Адаптер Firebase

 adapter1 = new FirebaseRecyclerAdapter<contact, contactAdapter>(options1) {
            @Override
            protected void onBindViewHolder(@NonNull final contactAdapter holder, final int position, @NonNull contact model) {
                holder.contactName.setText(model.getContactName());
                holder.contactPhone.setText(model.getContactPhone());
                if(lastCheckedPos == position){
                    holder.chk.setChecked(true);
                }
                else{
                    holder.chk.setChecked(false);
                }
                holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                    @Override
                    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                        if (position == lastCheckedPos) {
                            holder.chk.setChecked(false);
                            lastCheckedPos = -1;
                        }else {
                            lastCheckedPos = position;
                            for (int i = 0; i < adapter1.getItemCount(); i++) {
                                if (adapter1.getItem(i).isSelected(true)) {
                                    number = ((TextView) holder.itemView.findViewById(R.id.contactPhone)).getText().toString();
                                    Toast.makeText(getActivity(), "Data Inserted....." + number, Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                }
                            }
                            contactsView.post(new Runnable()
                            {
                                @Override
                                public void run() {
                                    adapter1.notifyDataSetChanged();
                                }
                            });

                        }
                    }
                });
            }

            @NonNull
            @Override
            public contactAdapter onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
                return new contactAdapter(LayoutInflater.from(getActivity()).inflate(R.layout.item_contacts, parent, false));

            }
        };

Класс адаптера

public class contactAdapter extends RecyclerView.ViewHolder{

    public TextView contactName, contactPhone;
    CheckBox chk;
    AdapterView.OnItemClickListener itemClickListener;




    public contactAdapter(@NonNull View itemView) {
        super(itemView);
        contactName = itemView.findViewById(R.id.contactName);
        contactPhone = itemView.findViewById(R.id.contactPhone);
        chk = itemView.findViewById(R.id.myCheckBox);
        this.setIsRecyclable(false);

    }
}

Любые предложения о том, как сохранить флажки, сохраненные, даже если мое приложение закрыто?

1 Ответ

2 голосов
/ 24 апреля 2020

Попробуйте сохранить в shared prefrences позицию нажатого элемента и состояние:

@Override
protected void onBindViewHolder(@NonNull final contactAdapter holder, final int position, @NonNull contact model) {

//setting the views
holder.contactName.setText(model.getContactName());
holder.contactPhone.setText(model.getContactPhone());

//check prefrences for the state of the check
SharedPreferences prefs = getSharedPreferences("check", MODE_PRIVATE); 
String check_state = prefs.getString( "state", "default");


if(check_state.equals("true"+String.valueOf(position))){

holder.chk.setChecked(true);


}else if (check_state.equals("false"+String.valueOf(position))){

holder.chk.setChecked(false);

}else{

holder.chk.setChecked(false);

}





//on click save the state in preference

holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

if (isChecked) {
//checked
holder.chk.setChecked(true);

//save to prefrences

SharedPreferences.Editor editor = getSharedPreferences("check", MODE_PRIVATE).edit();
editor.putString("state", "true"+String.valueOf(position));
editor.apply();
adapter1.notifyDataSetChanged();

}else {
//unchecked
holder.chk.setChecked(false);

//save to prefrences

SharedPreferences.Editor editor = getSharedPreferences("check", MODE_PRIVATE).edit();
editor.putString("state", "false"+String.valueOf(position));
editor.apply();
adapter1.notifyDataSetChanged();


}

}
});

}
...