Получить выбранные фишки из ChipGroup - PullRequest
1 голос
/ 29 апреля 2019

Я новичок в работе с чипами в Android. Я хочу получить выбранные фишки из ChipGroup, когда я нажимаю кнопку. Made в некотором роде работает с проверкой каждого чипа и добавлением его в набор, но хочет сделать его более эффективным. Почему-то я сам не нашел ответа на свой вопрос.

Существует также ошибка, когда я проверяю 2 фишки и снимаю галку с первого, который я проверил.

Вот мой код:

<com.google.android.material.chip.ChipGroup
                android:id="@+id/chipGroup"
                android:layout_width="300dp"
                android:layout_height="wrap_content"

                >

                <com.google.android.material.chip.Chip
                    android:id="@+id/chip1"
                    style="@style/Widget.MaterialComponents.Chip.Filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="1"
                    android:backgroundTint="#99FFFFFF"
                    />

                <com.google.android.material.chip.Chip
                    android:id="@+id/chip2"
                    style="@style/Widget.MaterialComponents.Chip.Filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="2"
                    android:backgroundTint="#99FFFFFF"/>


                <com.google.android.material.chip.Chip
                    android:id="@+id/chip3"
                    style="@style/Widget.MaterialComponents.Chip.Filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="3"
                    android:backgroundTint="#99FFFFFF"/>

                <com.google.android.material.chip.Chip
                    android:id="@+id/chip4"
                    style="@style/Widget.MaterialComponents.Chip.Filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="4"
                    android:backgroundTint="#99FFFFFF"/>

                <com.google.android.material.chip.Chip
                    android:id="@+id/chip5"
                    style="@style/Widget.MaterialComponents.Chip.Filter"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="5"
                    android:backgroundTint="#99FFFFFF"/>

            </com.google.android.material.chip.ChipGroup>
Set<Integer> chipIds = new HashSet<>();

int chip1Id= 1;
int chip2Id= 2;
int chip3Id= 3;
int chip4Id= 4;
int chip5Id= 5;

chip1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    chipIds.add(chip1Id);
                } else {
                    for (int i : chipIds) {
                        if (i == chip1Id) {
                            chipIds.remove(i);
                        }
                    }
                }
            }
        });

        chip2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    chipIds.add(chip2Id);
                } else {
                    for (int i : chipIds) {
                        if (i == chip2Id) {
                            chipIds.remove(i);
                        }
                    }
                }
            }
        });

        chip3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    chipIds.add(chip3Id);
                } else {
                    for (int i : chipIds) {
                        if (i == chip3Id) {
                            chipIds.remove(i);
                        }
                    }
                }
            }
        });

        chip4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    chipIds.add(chip4Id);
                } else {
                    for (int i : chipIds) {
                        if (i == chip4Id) {
                            chipIds.remove(i);
                        }
                    }
                }
            }
        });

        chip5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    chipIds.add(chip5Id);
                } else {
                    for (int i : chipIds) {
                        if (i == chip5Id) {
                            chipIds.remove(i);
                        }
                    }
                }
            }
        });

1 Ответ

1 голос
/ 17 мая 2019

У ChipGroup нет способа вернуть несколько выбранных фишек. Таким образом, вы можете использовать традиционный способ, зациклив все дочерние элементы внутри родительского элемента и проверив, установлен он или нет.

 for (index in 0 until mBinding.bookingIncludeCg.childCount) {
      val chip:Chip = mBinding.bookingIncludeCg.getChildAt(index) as Chip
          when(chip.id) {
              R.id.free_cancellation_chip -> hotelFilter.freeCancellation = chip.isChecked
              R.id.free_breakfast_chip -> hotelFilter.freeBreakfast = chip.isChecked
              R.id.free_wifi -> hotelFilter.freeWifi = chip.isChecked
          }
 }

И XML

<android.support.design.chip.ChipGroup
        android:id="@+id/booking_include_cg"
        android:layout_marginTop="@dimen/spacing_16"
        app:layout_constraintTop_toBottomOf="@+id/booking_include_label"
        app:layout_constraintLeft_toLeftOf="@id/guidelineLeft"
        app:layout_constraintRight_toRightOf="@id/guidelineRight"
        android:layout_width="0dp"
        android:layout_height="wrap_content">

        <android.support.design.chip.Chip
            android:id="@+id/free_cancellation_chip"
            style="@style/HotelFilterChipStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:chipText="@string/free_cancellation" />

        <android.support.design.chip.Chip
            android:id="@+id/free_breakfast_chip"
            style="@style/HotelFilterChipStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:chipText="@string/free_breakfast" />

        <android.support.design.chip.Chip
            android:id="@+id/free_wifi"
            style="@style/HotelFilterChipStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:chipText="@string/free_wifi" />

    </android.support.design.chip.ChipGroup>
...