Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //массив, размер которого равен кол-ву строчек, если значение true - то на этой строчке CheckBox.set(true) etc.
- private boolean[] checked;
- private int previous_number = -2;
- private static CheckBox lastChecked = null;
- ...
- public FriendsAdapter(Context context, ArrayList<FriendDataClass> contacts) {
- checked = new boolean[contacts.size()];
- ...
- }
- ...
- @Override
- public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- LayoutInflater inflater = LayoutInflater.from(parent.getContext());
- View v = inflater.inflate(R.layout.friend_row, parent, false);
- ViewHolder vh = new ViewHolder(v);
- return vh;
- }
- ...
- @Override
- public void onBindViewHolder(final ViewHolder holder, final int position) {
- holder.itemView.setOnClickListener(view -> {
- if (previous_number == -2){
- //данное условие срабатывает, когда мы первый раз нажимаем на любой элемент
- holder.choice_cb.setChecked(true);
- checked[position] = true;
- previous_number = position;
- lastChecked = holder.choice_cb;
- notifyDataSetChanged();
- Log.d("***", "сработало 1 условие");
- } else {
- //данное условие срабатывает, если мы уже нажимали на какой-либо элемент
- if (checked[position]){
- // в данное условие мы заходим, если нажали на элемент, который уже выбрал (стоит true)
- holder.choice_cb.setChecked(false);
- checked[position] = false;
- lastChecked = null;
- notifyDataSetChanged();
- Log.d("***", "сработало 2 условие");
- } else {
- // в данное условие мы заходим, если нажали на элемент, который еще не выбран (стоит false)
- holder.choice_cb.setChecked(true);
- checked[position] = true;
- if (lastChecked != null){
- lastChecked.setChecked(false);
- notifyItemChanged(previous_number);
- Log.d("***", "зашли в проверку в 3 условии");
- }
- lastChecked = holder.choice_cb;
- previous_number = position;
- notifyDataSetChanged();
- Log.d("***", "сработало 3 условие");
- }
- }
- });
- }
- public class SingleChoiceAdapter extends RecyclerView.Adapter<SingleChoiceAdapter.ItemHolder> {
- ArrayList<String> items;
- int checkedPosition = -1;
- public SingleChoiceAdapter (ArrayList<String> items){
- this.items = items;
- }
- @Override
- public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
- ItemHolder holder = new ItemHolder(v);
- return holder;
- }
- @Override
- public void onBindViewHolder(ItemHolder holder, final int position) {
- holder.text.setText(items.get(position));
- // Устанавливаем отметку на чекбоксе, позиция которого равна отмеченной
- // выражение будет true только при совпадении текущей позиции
- // и отмеченной - этот чекбокс выделится
- holder.checkBox.setChecked(position == checkedPosition);
- }
- @Override
- public int getItemCount() {
- return items.size();
- }
- public void setCheckedPosition (int position){
- checkedPosition = position;
- notifyDataSetChanged();
- }
- public int getChecedPosition (){
- return checkedPosition;
- }
- class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
- TextView text;
- CheckBox checkBox;
- ItemHolder(View itemView) {
- super(itemView);
- text = itemView.findViewById(R.id.text);
- checkBox = itemView.findViewById(R.id.checkBox);
- itemView.setOnClickListener(this);
- }
- @Override
- public void onClick(View v) {
- // при нажатии на элемент проверяем отмечен ли чекбокс в данной позиции
- // если нет, то запоминаем позицию для отметки
- // если отмечен, то сбрасываем отметку (ставим -1)
- checkedPosition = checkBox.isChecked() ? -1: getAdapterPosition();
- // обновляем список, чтобы убрать прошлую! отметку и показать новую
- notifyDataSetChanged();
- }
- }
- }
Add Comment
Please, Sign In to add comment