2

私は Android の初心者で、これが初めてのアプリケーションです。私の質問が明確でない場合は修正してください。私が達成しようとしていることについて、喜んで追加情報を追加します。動的に構築されたラジオグループがあります。このラジオ グループ内に、最初のグループから選択したラジオ ボタンに応じて、別のラジオ グループを作成したいと考えています。では、アイテムの配列リストがあり、各アイテムにいくつかのサイズ (つまり、XS、S、L) があるとします。ラジオボタン「XS」をチェックすると、選択したサイズ XS で使用可能な色を含む別のラジオグループが必要になります。私がこれを構築した方法は、ラジオグループを作成することであり、それは動的にラジオボタンです。メソッド onCheckedChanged() 内で、メソッド createRadioButtonsForAvailableColors() を呼び出しています。これは、チェックしたサイズに必要な色のラジオ ボタンを作成しますが、上部のラジオ グループで別のサイズをチェックすると、このサイズで使用できる新しい色が、以前に選択したサイズに表示された色に追加されます。ありがとうございました。これが私のon createメソッドです:

@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 つのサイズをチェックすると、サブグループのラジオ ボタンが正常に作成されます。1 つのサイズをクリックすると、利用可能な色が表示されます。ただし、チェックされたサイズを変更すると、現在選択されているサイズの色を示すボタンが、以前に選択されたサイズの前に表示されたボタンに追加されます。最初にサイズを選択したときに作成された内側のボタンをキャンセルして、現在選択されているサイズで使用可能な色のみを表示するにはどうすればよいですか?

これはおそらくそれを構築するための正しいアプローチではないと思います。だから、私は2つの質問があります:

  1. 通常、これを行うための最良の方法は何ですか? 内部ラジオ グループは最初のグループから選択したラジオ ボタンに依存するため、内部グループの作成は onCheckedChange() メソッド内で呼び出す必要があると想定しています。ここから別のアクティビティを開始する必要がありますか?それとも 1 つのアクティビティですべてを実行できますか?
  2. 私のアプローチが正しければ、メイン グループのラジオ ボタンが変更された場合に、作成された内側のラジオ ボタンを削除する方法を教えてください。

ありがとうございました

4

1 に答える 1

0

それで、私がこれを理解していれば、サイズのラジオボタンの値を変更すると問題が発生します。つまり、色が消えません。

  1. まあ、Java はボイラープレートがたくさんあるので、言うべきことはほとんどありません (私はおそらく似たような方法で行きたいと思います)。

  2. createRadioButtonsForAvailableColorsコンテンツの追加を開始する直前に、メソッド内にこれを追加できます。

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

RemoveViewsは、位置から始まる任意の量の子ビューを削除します (したがって、0 と子の合計を渡します)。

于 2014-05-30T08:18:58.553 に答える