mercredi 2 septembre 2020

RecyclerView adapter CheckBox Action

I am using a RecyclerView and an adapter to display the data of an array of Classes objects. I have a MainHolder and two subHolders - ItemHolder and HeaderHolder. ItemHolder has Checkbox. In RecyclerView, I use a CheckBox for one of the object's parameters. How can I save it? For the rest I use SharedPreferences, but here I don't know how to apply it in my Activity.

Here's my MainHolder:

public abstract class MainHolder extends RecyclerView.ViewHolder {

    abstract void setData(MainItem item);

    public MainHolder(@NonNull View itemView) {
        super(itemView);
    }
}

And ItemHolder:

public class ItemHolder extends MainHolder{

    private TextView tvTitle, tvComment, tvDate;
    private CheckBox cbImportance;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM", myDateFormatSymbols);



    private static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){

        @Override
        public String[] getMonths() {
            return new String[]{"января", "февраля", "марта", "апреля", "мая", "июня",
                    "июля", "августа", "сентября", "октября", "ноября", "декабря"};
        }

    };

    @Override
    void setData(MainItem item) {
        final Event event = item.getEventItem();
        tvTitle.setText(event.getName());
        tvComment.setText(event.getComment());
        tvDate.setText(simpleDateFormat.format(event.getDate()));
        cbImportance.setOnCheckedChangeListener(null);
        cbImportance.setChecked(event.getImportant());
        cbImportance.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                event.IsImportant = b;
            }
        });

    }

    public ItemHolder(@NonNull View itemView) {
        super(itemView);
        tvTitle = itemView.findViewById(R.id.tvTitle);
        tvComment = itemView.findViewById(R.id.tvComment);
        tvDate = itemView.findViewById(R.id.tvDate);
        cbImportance = itemView.findViewById(R.id.cbIconImportant);
    }

}

Here's my Adapter

public class MainAdapter extends RecyclerView.Adapter<MainHolder> {

    private Context context;
    private ArrayList<MainItem> data;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM", myDateFormatSymbols);

    private OnItemCheckedListener mOnItemChecked;

   public interface OnItemCheckedListener{
       void onItemChecked(int position, boolean isImportant);
   }

   public void setOnItemCheckedListener(OnItemCheckedListener listener){
       mOnItemChecked = listener;
   }




    private static DateFormatSymbols myDateFormatSymbols = new DateFormatSymbols(){

        @Override
        public String[] getMonths() {
            return new String[]{"января", "февраля", "марта", "апреля", "мая", "июня",
                    "июля", "августа", "сентября", "октября", "ноября", "декабря"};
        }

    };

    public MainAdapter(Context context, ArrayList<MainItem> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public MainHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        switch (viewType){
            case (Constants.ITEM_HEADER_TEXT_VIEWTYPE):
                view = LayoutInflater.from(context).inflate(R.layout.group_layout, parent, false);
                return new HeaderHolder(view);
            case (Constants.ITEM_EVENT_TEXT_VIEWTYPE):
                view = LayoutInflater.from(context).inflate(R.layout.list_item_cardview, parent, false);
                return new ItemHolder(view);

            default: throw new IllegalArgumentException();
        }
    }

    @Override
    public void onBindViewHolder(@NonNull final MainHolder holder, final int position) {
        holder.setData(data.get(position));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (holder.getItemViewType() == Constants.ITEM_HEADER_TEXT_VIEWTYPE)
                    Toast.makeText(context, "Нажал на заголовок" + position, Toast.LENGTH_SHORT).show();

                else
                    Toast.makeText(context, "Нажал на айтем" + position, Toast.LENGTH_SHORT).show();
            }
        });



    }

    @Override
    public int getItemViewType(int position) {
        return data.get(position).getViewType();
    }



Aucun commentaire:

Enregistrer un commentaire