Guest User

Untitled

a guest
Nov 18th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. //массив, размер которого равен кол-ву строчек, если значение true - то на этой строчке CheckBox.set(true) etc.
  2. private boolean[] checked;
  3. private int previous_number = -2;
  4. private static CheckBox lastChecked = null;
  5. ...
  6. public FriendsAdapter(Context context, ArrayList<FriendDataClass> contacts) {
  7. checked = new boolean[contacts.size()];
  8. ...
  9. }
  10. ...
  11. @Override
  12. public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  13. LayoutInflater inflater = LayoutInflater.from(parent.getContext());
  14. View v = inflater.inflate(R.layout.friend_row, parent, false);
  15. ViewHolder vh = new ViewHolder(v);
  16. return vh;
  17. }
  18. ...
  19.  
  20. @Override
  21. public void onBindViewHolder(final ViewHolder holder, final int position) {
  22.  
  23. holder.itemView.setOnClickListener(view -> {
  24.  
  25. if (previous_number == -2){
  26. //данное условие срабатывает, когда мы первый раз нажимаем на любой элемент
  27. holder.choice_cb.setChecked(true);
  28. checked[position] = true;
  29. previous_number = position;
  30. lastChecked = holder.choice_cb;
  31. notifyDataSetChanged();
  32. Log.d("***", "сработало 1 условие");
  33. } else {
  34. //данное условие срабатывает, если мы уже нажимали на какой-либо элемент
  35. if (checked[position]){
  36. // в данное условие мы заходим, если нажали на элемент, который уже выбрал (стоит true)
  37. holder.choice_cb.setChecked(false);
  38. checked[position] = false;
  39. lastChecked = null;
  40. notifyDataSetChanged();
  41. Log.d("***", "сработало 2 условие");
  42. } else {
  43. // в данное условие мы заходим, если нажали на элемент, который еще не выбран (стоит false)
  44. holder.choice_cb.setChecked(true);
  45. checked[position] = true;
  46.  
  47. if (lastChecked != null){
  48. lastChecked.setChecked(false);
  49. notifyItemChanged(previous_number);
  50. Log.d("***", "зашли в проверку в 3 условии");
  51. }
  52. lastChecked = holder.choice_cb;
  53. previous_number = position;
  54. notifyDataSetChanged();
  55. Log.d("***", "сработало 3 условие");
  56.  
  57. }
  58. }
  59.  
  60.  
  61.  
  62. });
  63. }
  64.  
  65. public class SingleChoiceAdapter extends RecyclerView.Adapter<SingleChoiceAdapter.ItemHolder> {
  66.  
  67. ArrayList<String> items;
  68. int checkedPosition = -1;
  69.  
  70. public SingleChoiceAdapter (ArrayList<String> items){
  71. this.items = items;
  72. }
  73.  
  74. @Override
  75. public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  76. View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  77. ItemHolder holder = new ItemHolder(v);
  78. return holder;
  79. }
  80.  
  81. @Override
  82. public void onBindViewHolder(ItemHolder holder, final int position) {
  83. holder.text.setText(items.get(position));
  84. // Устанавливаем отметку на чекбоксе, позиция которого равна отмеченной
  85. // выражение будет true только при совпадении текущей позиции
  86. // и отмеченной - этот чекбокс выделится
  87. holder.checkBox.setChecked(position == checkedPosition);
  88. }
  89.  
  90. @Override
  91. public int getItemCount() {
  92. return items.size();
  93. }
  94.  
  95. public void setCheckedPosition (int position){
  96. checkedPosition = position;
  97. notifyDataSetChanged();
  98. }
  99.  
  100. public int getChecedPosition (){
  101. return checkedPosition;
  102. }
  103.  
  104. class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  105. TextView text;
  106. CheckBox checkBox;
  107.  
  108. ItemHolder(View itemView) {
  109. super(itemView);
  110. text = itemView.findViewById(R.id.text);
  111. checkBox = itemView.findViewById(R.id.checkBox);
  112. itemView.setOnClickListener(this);
  113. }
  114.  
  115. @Override
  116. public void onClick(View v) {
  117. // при нажатии на элемент проверяем отмечен ли чекбокс в данной позиции
  118. // если нет, то запоминаем позицию для отметки
  119. // если отмечен, то сбрасываем отметку (ставим -1)
  120. checkedPosition = checkBox.isChecked() ? -1: getAdapterPosition();
  121. // обновляем список, чтобы убрать прошлую! отметку и показать новую
  122. notifyDataSetChanged();
  123.  
  124. }
  125. }
  126. }
Add Comment
Please, Sign In to add comment