2011-08-29 73 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,只需要檢索該值即可。