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 中的另一个按钮(查看 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()转换为 aButtonTag而不是 a String

如果您不需要“年龄”和“国家”信息来区分按钮类型,只需将每个按钮设置为另一个按钮即可。

编辑:

对于后一种方案,您可以在点击侦听器中使用它:

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

在参考这个问题here(通过ID或TAG查找按钮)后,我得到了问题的解决方案,它解决了我面临的问题!

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 回答