2011-08-29 50 views
0

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

这里是我的编码:

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++; 
     } 
    } 
+0

我觉得你不需要设置ID到所有按钮,android在创建按钮时设置。尝试删除setid部分。 – Aracem

+0

remove b.setId(MainIdCnt + MainId); 并再试一次。 – user370305

+0

我面临同样的问题 – pas

回答

0

一些东西......

  1. 如果你的主要布局是LinearLayout中,你不应该需要添加一个规则,以指示按钮应该出现在现有按钮的下面 - 它会自动添加到布局的最底部(垂直对齐)或非常右(水平对齐)。

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

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

  4. 对setId()的调用可能会塞满Android的内部运作。您应该让Android自动生成ID,而不是设置ID,只需要检索该值即可。