首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设置芯片组中可以选择的具体芯片数

设置芯片组中可以选择的具体芯片数
EN

Stack Overflow用户
提问于 2020-05-10 23:44:09
回答 2查看 910关注 0票数 1

用例:我正在制作一个类别选择器,用户必须从具有多个芯片的芯片组中选择5个芯片。不应允许用户选择超过5个筹码。

我的芯片组代码:

代码语言:javascript
复制
<com.google.android.material.chip.ChipGroup
        android:id="@+id/category_chip_group"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="16dp"
        >
        <com.google.android.material.chip.Chip
            android:id="@+id/tech_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Technology"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/sports_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Sports and Fitness"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"/>

        <com.google.android.material.chip.Chip
            android:id="@+id/public_speakin_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Public Speaking"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/biz_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"

            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Business and careers"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/read_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Reading and Writing"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/yoga_med_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Yoga and meditation"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/sing_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Singing"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/dance_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Dancing"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/food_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Food Blogging"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/gaming_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Gaming"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/beauty_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Beauty and Makeup"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/fashion_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"
            android:text="Fashion and Lifestyle"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/photography_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Photography"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/music_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Music"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/movies_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Movies and TV shows"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/travel_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Travel"/>
        <com.google.android.material.chip.Chip
            android:id="@+id/art_and_design_chip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checkable="true"
            android:clickable="true"
            android:focusable="true"
            app:chipBackgroundColor="@drawable/bg_chip_list"

            android:text="Art and design"/>


    </com.google.android.material.chip.ChipGroup>

我的用于芯片选择的java代码

代码语言:javascript
复制
Chip chip = (Chip) category_chips.getChildAt(i);
if (chip.isChecked()) {
    Log.e("i", "" + i);
    i = i + 1;
    categories.add(chip.getText().toString());
    if (i > 5) {
        chip.setChecked(false);
        chip.setSelected(false);
    }
}

我想将所选筹码中的字符串添加到数组列表中,此代码是我所做的尝试之一。我是一个初学者,我不明白如何实现这个特性。

请告诉我如何在java中实现这个用例。我在stackoverflow上尝试了很多答案,但没有找到一个满足我的用例。

EN

回答 2

Stack Overflow用户

发布于 2020-05-12 15:27:15

您可以在您的芯片中添加一个OnCheckedChangeListener,并在ChipGroup中检查检查的芯片数量。类似于:

代码语言:javascript
复制
  ChipGroup chipGroup = findViewById(R.id.category_chip_group);
  ..
  chip.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {
      if (checked) {
        //Get all checked chips in the group
        List<Integer> ids = chipGroup.getCheckedChipIds();
        if (ids.size() > 5) { 
          chip.setChecked(false);  //force to unchecked the chip
        }
      }
    }
  });
票数 1
EN

Stack Overflow用户

发布于 2020-05-11 01:48:21

如下所示更改芯片样式:

代码语言:javascript
复制
<com.google.android.material.chip.Chip
    ...
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/Widget.MaterialComponents.Chip.Filter"
    ...
 />

将选中的监听器添加到所有芯片:

代码语言:javascript
复制
tech_chip.setOnCheckedChangeListener(this);
....
art_and_design_chip.setOnCheckedChangeListener(this);

onCheckedChanged方法:

代码语言:javascript
复制
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
    Chip chip = findViewById(compoundButton.getId());
    String chipText = chip.getText().toString();

    if(categories.size()< 5){
        categories.add(chipText);
    }else {
        if(categories.contains(chipText)){
            categories.remove(chipText);
        }else{
            chip.setChecked(false);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61714643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档