Android Material Chip - ChipGroup with singleSelection 无法动态添加筹码
Android Material Chip - ChipGroup with singleSelection doesn't work adding chips dynamically
我是第一次使用 Material Chip。
问题:
我正在使用以下代码动态添加芯片。请检查我写的 app:singleSelection="true"
这对我来说很重要。 即使它一次select发送多个筹码。
我想select 一次只有一个带刻度的筹码。
XML代码:
<com.google.android.material.chip.ChipGroup
android:id="@+id/categoryChipsView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
app:chipSpacing="10dp"
app:singleSelection="true"
app:itemSpacing="15dp"
app:singleLine="true">
</com.google.android.material.chip.ChipGroup>
Java代码:
private void addChipView(String chipText) {
View child = getLayoutInflater().inflate(R.layout.row_chip_view, null);
Chip chip = child.findViewById(R.id.chip);
chip.setText(chipText);
chip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, ((Chip) v).getText(), Toast.LENGTH_SHORT).show();
}
});
// This is ChipGroup view
binding.categoryChipsView.addView(child);
}
row_chip_view.xml
<com.google.android.material.chip.Chip xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/chip"
style="@style/Widget.MaterialComponents.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
我已经静态地尝试过,我将 row_chip_view.xml
的视图作为 ChipGroup 的子项粘贴到主 xml 中,并且工作正常。我一次只能select一个筹码。
<com.google.android.material.chip.ChipGroup
android:id="@+id/categoryChipsView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
app:chipSpacing="10dp"
app:singleSelection="true"
app:itemSpacing="15dp"
app:singleLine="true">
<com.google.android.material.chip.Chip
android:id="@+id/chip"
style="@style/Widget.MaterialComponents.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
<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:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
<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:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
</com.google.android.material.chip.ChipGroup>
但我想要动态的。
Update: New Scenario
First of all I have added four chips in XML within ChipGroup
and
after that tried to add another three chips PROGRAMATICALLY in same
ChipGroup
. The first four chips is allow to select only one but last
three chips allow me to select multiple. Very Weird.
如果我遗漏了什么,请告诉我。
我们将不胜感激。
而是 onClickListener
使用 setOnCheckedChangeListener
这对我来说与 singleSelection="true"
结合使用
删除 在您的 row_chip_view.xml
android:id 属性中。
<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"
.../>
并在 addChipView
中使用:
private void addChipView(String chipText) {
Chip chip = (Chip) getLayoutInflater().inflate(R.layout.row_chip_view, chipGroup, false);
chip.setText(chipText);
//...
// This is ChipGroup view
chipGroup.addView(chip);
}
在将 Chip 添加到 ChipGroup 之前添加整数 id
Chip chip = (Chip) getLayoutInflater().inflate(R.layout.custom_chip, chipGroup,
false);
chip.setId(i);
chip.setText("str");
chipGroup.addView(chip);
我是第一次使用 Material Chip。
问题:
我正在使用以下代码动态添加芯片。请检查我写的 app:singleSelection="true"
这对我来说很重要。 即使它一次select发送多个筹码。
我想select 一次只有一个带刻度的筹码。
XML代码:
<com.google.android.material.chip.ChipGroup
android:id="@+id/categoryChipsView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
app:chipSpacing="10dp"
app:singleSelection="true"
app:itemSpacing="15dp"
app:singleLine="true">
</com.google.android.material.chip.ChipGroup>
Java代码:
private void addChipView(String chipText) {
View child = getLayoutInflater().inflate(R.layout.row_chip_view, null);
Chip chip = child.findViewById(R.id.chip);
chip.setText(chipText);
chip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext, ((Chip) v).getText(), Toast.LENGTH_SHORT).show();
}
});
// This is ChipGroup view
binding.categoryChipsView.addView(child);
}
row_chip_view.xml
<com.google.android.material.chip.Chip xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/chip"
style="@style/Widget.MaterialComponents.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
我已经静态地尝试过,我将 row_chip_view.xml
的视图作为 ChipGroup 的子项粘贴到主 xml 中,并且工作正常。我一次只能select一个筹码。
<com.google.android.material.chip.ChipGroup
android:id="@+id/categoryChipsView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
app:chipSpacing="10dp"
app:singleSelection="true"
app:itemSpacing="15dp"
app:singleLine="true">
<com.google.android.material.chip.Chip
android:id="@+id/chip"
style="@style/Widget.MaterialComponents.Chip.Filter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
<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:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
<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:layout_margin="10dp"
android:text="@string/app_name"
android:textColor="@android:color/white"
app:checkedIcon="@drawable/ic_check"
app:chipBackgroundColor="@color/colorAccent"
app:chipEndPadding="8dp"
app:chipIconTint="@android:color/white"
app:chipStartPadding="8dp"
app:textEndPadding="5dp"
app:textStartPadding="5dp" />
</com.google.android.material.chip.ChipGroup>
但我想要动态的。
Update: New Scenario
First of all I have added four chips in XML within
ChipGroup
and after that tried to add another three chips PROGRAMATICALLY in sameChipGroup
. The first four chips is allow to select only one but last three chips allow me to select multiple. Very Weird.
如果我遗漏了什么,请告诉我。
我们将不胜感激。
而是 onClickListener
使用 setOnCheckedChangeListener
这对我来说与 singleSelection="true"
删除 在您的 row_chip_view.xml
android:id 属性中。
<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"
.../>
并在 addChipView
中使用:
private void addChipView(String chipText) {
Chip chip = (Chip) getLayoutInflater().inflate(R.layout.row_chip_view, chipGroup, false);
chip.setText(chipText);
//...
// This is ChipGroup view
chipGroup.addView(chip);
}
在将 Chip 添加到 ChipGroup 之前添加整数 id
Chip chip = (Chip) getLayoutInflater().inflate(R.layout.custom_chip, chipGroup,
false);
chip.setId(i);
chip.setText("str");
chipGroup.addView(chip);