添加第一个Button后,在Android中动态添加按钮不起作用

时间:2011-08-29 07:08:21

标签: java android button

我有一个我在代码中创建的按钮,它有一个Click事件的监听器。每次单击该按钮时,它应生成另一个按钮并将其添加到原始按钮下方。但是,无论我点击第一个按钮多少次,它只会添加一次动态按钮,而不再添加。

这是我的编码:

public class DynaminControlActivity extends Activity {
    private RelativeLayout container;
    private int mainIdCnt = 0;
    private int mainId = 100;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        createMainButton();
    }

    public void createMainButton() {
        container = (RelativeLayout) findViewById(R.id.workLayout);
        Button b = new Button(this);
        b.setId(mainIdCnt + mainId);
        CharSequence text = "Main +";
        b.setText(text);
        container.addView(b);
        if (mainId > 0) {
            mainId++;
        }
        b.setOnClickListener((new View.OnClickListener() {
            public void onClick(View v) {
                createDynamicButton();
            }
        }));
    }

    public void createDynamicButton() {
        container = (RelativeLayout) findViewById(R.id.workLayout);
        Button b = new Button(this);
        CharSequence text = "Main +";
        b.setText(text);
        RelativeLayout.LayoutParams relLayout = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        relLayout.addRule(RelativeLayout.BELOW, mainIdCnt + mainId);
        container.addView(b, relLayout);
        if (mainId > 0) {
            mainId++;
        }
    }

1 个答案:

答案 0 :(得分:0)

一些事情......

  1. 如果您的主要布局是LinearLayout,则您不需要添加规则来指示按钮应显示在现有按钮下方 - 它将自动添加到最底部(垂直对齐)或非常右(水平对齐)布局。

  2. 所有按钮都有相同的文字。你确定每次都点击第一个按钮吗?我注意到只有你的第一个按钮上有一个监听器,所以如果你不小心点击其中一个按钮,那么什么都不会发生。

  3. 如果您打算添加多个按钮,它会快速扩展到大于屏幕尺寸,因此您应确保主要布局位于ScrollView中,以便您可以看到所有按钮添加

  4. 对setId()的调用可能会充斥着Android的内部工作原理。您应该让Android自动生成ID,而不是设置ID,如果您需要引用它,只需检索该值。