1

このループを使用してボタンのペアを生成する動的レイアウト用にこのコードを作成しました(これは、ボタンを生成するコードの一部です)

  for(int i = 1; i <= 2 ; i++) {
        Button button1 = new Button(this);
        button1.setTag("age");
        button1.setId(i);
        layout.addView(button1);

        Button button2 = new Button(this);
        button2.setId(i);
        button2.setTag("country");
        button2.setEnabled(false);
        layout.addView(button2);

        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
       }

私がやりたいのは、button1がクリックされた場合、button2が有効になるはずです(最初は無効になっています)。

ボタンがxmlで作成されている場合、これは非常に簡単な作業です。ボタンごとに個別のR.id.xxxxx名が付けられますが、ここでは、OnClick(View v )有効かどうかを変更できるようにする方法、ボタンを認識するための別のパラメータを持つように各ボタンにタグを追加しようとしましたが、のビュー情報で他のボタンを認識する方法がわかりませんクリックされたボタン1。

4

2 に答える 2

2

クリック処理でボタンタグを使用していると思います。タグ データを保持し、ボタン間に必要な配線を追加するには、タグとして機能するデータ構造を作成できます。

static class ButtonTag {
    String buttonType;
    Button partner;
    ButtonTag(String type, Button button) {
        buttonType = type;
        partner = button;
    }
}

次に、セットアップ コードを再編成できます。

for(int i = 1; i <= 2 ; i++) {
    Button button1 = new Button(this);
    button1.setId(i);
    layout.addView(button1);

    Button button2 = new Button(this);
    button2.setId(i);
    button2.setEnabled(false);
    button1.setTag(new ButtonTag("age", button2));
    button2.setTag(new ButtonTag("country", button1));
    layout.addView(button2);
}

クリック処理は、ではなく にキャストgetTag()するように変更する必要があることは明らかです。ButtonTagString

ボタンの種類を区別するために「年齢」と「国」の情報が必要ない場合は、各ボタンを他のボタンのタグとして設定します。

編集:

後者のスキームでは、これをクリック リスナーで使用する方法を次に示します。

public void onClick(View v) {
    Object tag = v.getTag();
    if (tag instanceof Button) {
        Button btn = (Button) tag;
        btn.setEnabled(true);
        v.setEnabled(false);
    }
}

他の理由でタグの「年齢」と「国」の部分が必要な場合、コードは少しだけ異なります。

public void onClick(View v) {
    Object tag = v.getTag();
    if (tag instanceof ButtonTag) {
        ButtonTag bTag = (ButtonTag) tag;
        bTag.partner.setEnabled(true);
        v.setEnabled(false);
    }
}
于 2012-06-05T00:33:23.623 に答える
2

ここでこの質問を参照した後、問題の解決策を得ました(IDまたはタグでボタンを検索)、私が直面していた問題を解決します!

public class DynmaicViewExperimentActivity extends Activity implements OnClickListener{

List<Button> buttons;

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        buttons = new ArrayList<Button>();
        setDynamicContentViewOfThisPage();
    }

public void onClick(View v) {
    // TODO Auto-generated method stub
    int buttonType = 0;
    if (v.getTag()=="age")
            buttonType = 1;
    else if (v.getTag()=="country")
            buttonType = 2;
    switch (buttonType) {
        case 1:
            for(Button b: buttons) {
                if(b.getId() == v.getId() && b.getTag().equals("country")){
                    b.setEnabled(true);
                    v.setEnabled(false);
                    }
        case 2:
            for(Button b: buttons) {
                if(b.getId() == v.getId() && b.getTag().equals("age")){
                    b.setEnabled(true);
                    v.setEnabled(false);
                    }
                }
            }
        }


private void setDynamicContentViewOfThisPage() {
    // Defining the Scroll View and the LinearLayout
    ScrollView sv = new ScrollView(this);
    LinearLayout l = new LinearLayout(this);
    l.setOrientation(LinearLayout.VERTICAL);
    sv.addView(l);

                                for(int i = 1; i <= 2 ; i++) {

                                  Button button1 = new Button(this);
                                  button1.setId(i);
                                  button1.setTag("age");
                                  buttons.add(button1);
                                  l.addView(button1);

                                  Button button2 = new Button(this);
                                  button2.setId(i);
                                  button2.setTag("country");
                                  buttons.add(button2);
                                  l.addView(button2);

                                  button.setOnClickListener(this);
                                  button2.setOnClickListener(this);

    // Set the content View to this
        this.setContentView(sv);
    }
   }
 }
于 2012-06-05T11:03:16.737 に答える