Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 芯片组-防止取消选择芯片_Android_Material Design_Android Design Library_Android Chips - Fatal编程技术网

Android 芯片组-防止取消选择芯片

Android 芯片组-防止取消选择芯片,android,material-design,android-design-library,android-chips,Android,Material Design,Android Design Library,Android Chips,这是我根据列表设置芯片组和内部芯片的代码: val chipGroup = region_list val inflator = LayoutInflater.from(chipGroup.context) val children = categoryList.map { categoryName -> val chip = inflator.inflate(R.layout.reg

这是我根据列表设置芯片组和内部芯片的代码:

val chipGroup = region_list
                val inflator = LayoutInflater.from(chipGroup.context)
                val children = categoryList.map { categoryName ->

                    val chip = inflator.inflate(R.layout.region, chipGroup, false) as Chip
                    chip.text = categoryName.replace('_', ' ')
                    chip.tag = categoryName
                    chip.setOnCheckedChangeListener { button, isChecked ->
                        val s = viewModel.updateFilter(button.tag as String, isChecked)

//s is a string = {"change", "keep"}
//if s is keep that means that the same chip that was selected was pressed again, and in normal chip behaviour in android that chip would then be deselected, I don't want that
                    }

                }
s是字符串={“更改”,“保留”} 如果s是keep,这意味着再次按下所选的同一个芯片,在android的正常芯片行为中,该芯片将被取消选择,我不希望这样。我不敢相信android团队从未想过有人会需要一个无法取消选择项目的芯片组,芯片的意义是什么,用它作为某种过滤器来更新下面的视图。

试试这个逻辑:

您的活动

    int i=0;
    String chipArr[]={"First","Second","Third","Fourth"};
    int selectedChipId=0;

    for (final String chipName : chipArr) {
         Chip chip = (Chip) layoutInflater.inflate(R.layout.cat_chip_group_item_filter, chipGroup, false);
            chip.setText(chipName);
            chip.setId(i);
    }

    for (final String chipName : fileNameChip) {
         LayoutInflater layoutInflater = getLayoutInflater();
         Chip chip = (Chip) layoutInflater.inflate(R.layout.cat_chip_group_item_filter, chipGroup, false);
         chip.setText(chipName);
         chip.setId(i);

        if (i == 0) chip.setSelected(true);

     chip.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                   selectedChipId=v.getId();
             }
             });
        chipGroup.addView(chip);
        i++;
    }

     chipGroup.setOnCheckedChangeListener(new ChipGroup.OnCheckedChangeListener() {
              @Override
              public void onCheckedChanged(ChipGroup group, int checkedId) {
                     Log.d(TAG, "onCheckedChanged: " + checkedId);

                     if (checkedId == selectedChipId) {
                              chip.setSelected(true);
                     }
               }
    });
活动布局:


您的cat\u芯片\u组\u项目\u过滤器。xml:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.Chip
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/Widget.MaterialComponents.Chip.Filter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

让我知道它是否对您有效,因为我还没有测试过

尝试以下逻辑:

您的活动

    int i=0;
    String chipArr[]={"First","Second","Third","Fourth"};
    int selectedChipId=0;

    for (final String chipName : chipArr) {
         Chip chip = (Chip) layoutInflater.inflate(R.layout.cat_chip_group_item_filter, chipGroup, false);
            chip.setText(chipName);
            chip.setId(i);
    }

    for (final String chipName : fileNameChip) {
         LayoutInflater layoutInflater = getLayoutInflater();
         Chip chip = (Chip) layoutInflater.inflate(R.layout.cat_chip_group_item_filter, chipGroup, false);
         chip.setText(chipName);
         chip.setId(i);

        if (i == 0) chip.setSelected(true);

     chip.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                   selectedChipId=v.getId();
             }
             });
        chipGroup.addView(chip);
        i++;
    }

     chipGroup.setOnCheckedChangeListener(new ChipGroup.OnCheckedChangeListener() {
              @Override
              public void onCheckedChanged(ChipGroup group, int checkedId) {
                     Log.d(TAG, "onCheckedChanged: " + checkedId);

                     if (checkedId == selectedChipId) {
                              chip.setSelected(true);
                     }
               }
    });
活动布局:


您的cat\u芯片\u组\u项目\u过滤器。xml:

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.chip.Chip
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    style="@style/Widget.MaterialComponents.Chip.Filter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>


让我知道它是否对您有效,因为我还没有测试过

您尝试过过滤芯片吗?过滤和选择芯片,同样的,如果您选择一次就按下它,如果您第二次按下它就取消选择,我也尝试过在芯片组上而不是在单个元素上设置clickListener,但它是相同的。如果选择了所选芯片,您可以自己尝试一些逻辑!chipGroup.setOnCheckedChangeListener{group,selectedId->如果再次按下已选择的芯片,selectedId将为-1,这告诉我已选择的芯片已按下,但无法阻止取消选择的发生,我尝试使用return语句,如果selectedId为-1,但此处已取消选择,则必须有更简单的方法来执行此操作或安卓系统的用户并不聪明,因为拥有无法取消选择的芯片是一种常见的行为}你试过过滤芯片吗?过滤和选择芯片,同样的事情,如果你一次按下它,如果你第二次按下它,它被取消选择,我也试过在芯片组上设置clickListener,而不是在单个元素上设置clickListener,但它是相同的,如果选择了所选芯片,你可以自己尝试一些逻辑!chipGroup.setOnCheckedChangeListener{group,selectedId->如果再次按下已选择的芯片,selectedId将为-1,这告诉我已选择的芯片已按下,但无法阻止取消选择的发生,我尝试使用return语句,如果selectedId为-1,但此处已取消选择,则必须有更简单的方法来执行此操作或安卓系统的用户并不聪明,因为拥有无法取消选择的芯片是一种常见的行为}