Я в настоящее время использую флажки, но я также пробовал переключатели. Кажется, я не могу выбрать только один элемент за раз. Как вы можете видеть, я пытался реализовать это, но это не работает. Мой желаемый результат - один элемент, который нужно проверять за раз, и чтобы этот элемент оставался проверенным, даже если приложение закрыто. Здесь я использую флажок
options1 = new FirebaseRecyclerOptions.Builder<contact>().setQuery(databaseReference1,contact.class).build();
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());
holder.chk.setTag(holder.getAdapterPosition());
holder.chk.setChecked(position == lastCheckedPos);
holder.chk.setOnCheckedChangeListener(null);
if(holder.getAdapterPosition() == lastCheckedPos){
holder.chk.setChecked(true);
}else{
holder.chk.setChecked(false);
}
holder.chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
holder.chk.setChecked(true);
}else {
holder.chk.setChecked(false);
}
}
});
holder.chk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for(int i =0; i <adapter1.getItemCount(); i++){
if(adapter1.getItem(i).isSelected(true)){
number = ((TextView) contactsView.findViewHolderForAdapterPosition(position).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();
}
}
}
});
}
. Я использую адаптер базы данных firebase, чтобы вытащить данные из базы. Это мой класс модели
public class contact {
String contactName;
String contactPhone;
private boolean isSelected;
public contact() {
}
public contact(String contactName, String contactPhone) {
this.contactName = contactName;
this.contactPhone = contactPhone;
}
public String getContactName() {
return contactName;
}
public void setContactName(String contactName) {
this.contactName = contactName;
}
public String getContactPhone() {
return contactPhone;
}
public void setContactPhone(String contactPhone) {
this.contactPhone = contactPhone;
}
public boolean isSelected(boolean selected){
return isSelected= selected;
}
}
А это мой класс адаптера:
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);
}
}
Я пробовал несколько вещей, но все примеры, которые я видел, не кажутся помогать. Я не знаю, является ли это чем-то большим или небольшим исправлением. Любые предложения.