0

ループを適用して複数のチェックボックスを作成しました。

for(int l=0;l<len;l++)
{
chkBox = dynamicUiComponents.myCheckBox(context, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT), 100+i, "Unchecked", opts[l]);
myLayout.addView(chkBox);
}

すべてのチェックボックスが表示されています。しかし、そのチェック ボックスに setOnCheckedChangeListener(l) を適用すると、最後に追加されたチェック ボックスのテキストのみがプリンターになります。これは、ループのたびに、chkBox 変数への新しいオブジェクト参照を提供するためです。ここでは、どのチェックボックスがクリックされたかを識別する方法を示します。

4

4 に答える 4

1

あなたのコードでは、 の配列を作成していません。作成したのCheckBoxesは 1 つだけです。したがって、 usingsetOnCheckChangedListener(I)は を参照しませんcheckBox。ループ内でリスナーを設定するか、後で参照できるようにそれぞれに固有の ID を指定してリスナーを設定します。

for(int l=0;l<5;l++) { chkBox = new CheckBox(context); 
chkBox.setOnCheckChangedListener(
//your implementation
);
myLayout.addView(chkBox); }
于 2012-10-20T11:53:38.717 に答える
0

チェックボックスごとに異なるタグを設定し、これにリスナーを設定できます。アクティビティはリスナーを実装してから、イベントがトリガーされたときに必要なことを実行する必要があります。

于 2012-10-20T12:11:01.533 に答える
0

以下を試してください

for(int l=0;l<5;l++) 
{ 
    chkBox = new CheckBox(context); 
    myLayout.addView(chkBox); 
    chkBox.setTag(""+l);
    chkBox.setOnCheckChangeListener(new ...(){   
        int x = Integer.ValueOf(chkBox.getTag());
        //do whatever you want to do here
    });
}
于 2012-10-20T11:54:17.080 に答える
0

タグにIDを追加できます:

for(int id=0;id<5;id++) { 
 chkBox = new CheckBox(context);
 chkBox.setTag(id); 
 myLayout.addView(chkBox); 
}

そして、あなたは使用することができます:

Integer i = (Integer) chkBox.getTag();
于 2012-10-20T11:48:07.533 に答える