2

我对 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);
    }

内部组是正确创建的,但是在检查第一组中的一个大小时,它会正常构建子组单选按钮。如果我单击一种尺寸,它会显示可用的颜色。但是,在更改选中的尺寸时,显示当前所选尺寸颜色的按钮将添加到之前所选尺寸的按钮中。如何取消第一次选择尺寸时创建的内部按钮并仅显示当前所选尺寸的可用颜色?

我认为这可能不是构建它的正确方法。所以,我有两个问题:

  1. 通常,最好的方法是什么?由于我的内部单选组取决于从第一组中选择的单选按钮,我假设应该在 onCheckedChange() 方法中调用内部组的创建。我应该从这里开始另一项活动,还是我可以在一项活动中全部完成?
  2. 如果我的方法是正确的,您能否告诉我如何删除创建的内部单选按钮,以防主组中的单选按钮被更改?

谢谢

4

1 回答 1

0

所以,如果我理解这一点,问题就出现在您更改尺寸单选按钮的值时,这意味着颜色不会消失。

  1. 嗯,Java 是关于大量的样板化的,没有什么好说的(我可能会采用类似的方式)。

  2. 您可以createRadioButtonsForAvailableColors在开始添加内容之前将其添加到方法中:

productDetailsLayout.removeViews(0, productDetailsLayout.getChildCount());

RemoveViews将从一个位置开始删除任意数量的子视图(因此我将其传递为 0 和子视图的总数)。

于 2014-05-30T08:18:58.553 回答