我对Android很新,这是我的第一个应用程序,所以如果我的问题不明确请更正,我很乐意添加更多关于我想要实现的信息。 我有一个动态建立的无线电组。在这个广播组中,我希望有另一个广播组,这取决于从第一组中选择的单选按钮。 所以,让我们说我有一个项目的数组列表,对于每个项目,我有一些可用的大小(即:XS,S,L)。如果我检查单选按钮" XS",我希望有另一个无线电组,其中包含所选尺寸的可用颜色XS。 我构建它的方法是动态创建一个无线电组及其单选按钮。在方法onCheckedChanged()中,我调用方法createRadioButtonsForAvailableColors()。这个创建了具有所选尺寸的必要颜色的单选按钮,但是一旦我在上部单元组中检查另一个尺寸,可用于此尺寸的新颜色将添加到为之前选择的尺寸显示的颜色。 谢谢。 这是我的创建方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show_product_details);
sizesList = getSizes(getIDFromPreviousActivity());
createRadioButtonsForAvailableSizes(sizesList);
}
这是我为包含可用尺寸的单选按钮的广播组创建的:
// creates the radio buttons with the available sizes
public void createRadioButtonsForAvailableSizes(ArrayList<String> sizeList) {
productDetailsLayout = (LinearLayout) findViewById(R.id.productDetailsLayout);
RadioGroup rg = new RadioGroup(this);
rg.setOrientation(RadioGroup.HORIZONTAL);
int n = sizeList.size();
final RadioButton[] rb = new RadioButton[n];
for(int i=0; i< sizeList.size(); i++) {
colorList = getColors(getIDFromPreviousActivity(),sizeList.get(i));
rg.setOrientation(RadioGroup.HORIZONTAL);
rb[i] = new RadioButton(this);
rg.addView(rb[i]);
rb[i].setText(sizesList.get(i).toString());
rb[i].setId(getIDForRadioButton(sizesList.get(i).toString()));
rb[i].setButtonDrawable(R.drawable.radiobuttonunchecked);
rb[i].setOnCheckedChangeListener(this);
}
productDetailsLayout.addView(rg);
productDetailsLayout.setPadding(50, 50, 50, 50);
}
这是颜色的创建(与尺寸相同):
// create radio buttons for available colors
public void createRadioButtonsForAvailableColors(ArrayList<String> colorList) {
Log.d("createRadioButtonsForAvailableColors","");
productDetailsLayout = (LinearLayout) findViewById(R.id.productDetailsLayout);
RadioGroup rg = new RadioGroup(this);
rg.setOrientation(RadioGroup.HORIZONTAL);
int n = colorList.size();
final RadioButton[] rb = new RadioButton[n];
for(int i=0; i< colorList.size(); i++) {
Log.d("color"+i,colorList.get(i));
rg.setOrientation(RadioGroup.HORIZONTAL);
rb[i] = new RadioButton(this);
rg.addView(rb[i]);
rb[i].setText(colorList.get(i).toString());
rb[i].setId(getIDForRadioButton(colorList.get(i).toString()));
rb[i].setButtonDrawable(R.drawable.radiobuttonunchecked);
rb[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override public void onCheckedChanged(CompoundButton button, boolean isChecked) {
button.setButtonDrawable(isChecked ? R.drawable.radiobuttonchecked : R.drawable.radiobuttonunchecked);
}
});
}
productDetailsLayout.addView(rg);
productDetailsLayout.setPadding(50, 50, 50, 50);
}
这是我的onCheckedChange方法:
@Override
public void onCheckedChanged(CompoundButton button, boolean isChecked) {
button.setButtonDrawable(isChecked ? R.drawable.radiobuttonchecked : R.drawable.radiobuttonunchecked);
String text = button.getText().toString();
int productID = getIDFromPreviousActivity();
ArrayList<String> colorList = getColors(productID, text);
createRadioButtonsForAvailableColors(colorList);
}
内部组是正确创建的,但在检查第一组中的一个大小时,它会正常构建子组单选按钮。如果我单击一个尺寸,它会显示可用的颜色。但是,在更改选中的尺寸时,显示当前所选尺寸颜色的按钮会添加到之前显示的按钮中,以选择上一个尺寸。如何取消第一次选择尺寸时创建的内部按钮,并仅显示当前所选尺寸的可用颜色?
我认为这可能不是构建它的正确方法。所以,我有两个问题:
谢谢
答案 0 :(得分:0)
所以,如果我理解了这一点,那么当您更改尺寸单选按钮的值时会出现问题,这意味着颜色不会消失。
那么,Java就是很多关于电子设备的问题,并没有什么可说的(我可能会采取类似的方式)。
您可以在开始添加内容之前在createRadioButtonsForAvailableColors
方法中添加此内容:
productDetailsLayout.removeViews(0, productDetailsLayout.getChildCount());
RemoveViews将从一个位置开始删除任意数量的子视图(因此我将其传递给0以及子项的总数)。