2016-08-03 33 views
0

我的按鈕此代碼是上點擊收聽下,也根據上創建方法和時間我點擊的TextView或加載它停止運行的頁面,寫不幸的是,appName已停止。我想點擊文本視圖通過Java來遞增的Android

for (int i = 0 ; i < MAX_BUTTONS; i++){ 
     Button button = (Button) getLayoutInflater().inflate(R.layout.button_layout,buttonsContainer,false); 
     button.setText("Test" + i); 
     button.setOnClickListener((View.OnClickListener) this); 
     buttonsContainer.addView(button); 

     if (i != MAX_BUTTONS - i){ 
      buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize)); 
     } 

    } 

回答

0

我認爲這是因爲您在setOnClickListener中投射。只要使用「this」作爲參數,如果您的類實現了偵聽器,則不需要強制轉換。另請注意,您通過在循環中調用getLayoutInflater來創建不必要的對象垃圾。所有你需要做的就是在循環之外調用它,並使用它的引用。通過這種方式,您不需要創建n +對象,只需創建一個。最後我看到你打電話

if(i != MAX_BUTTONS - i) 

沒有你的意思

if(i != MAX_BUTTONS - 1) 
+0

謝謝,終於摸索 – Akanni

+0

如果我幫你,請喜歡和投票最佳答案我:)歡迎您順便說一句 –

0

看起來你可能需要創建一個新的按鈕對象的每次循環,而不是膨脹的佈局,例如

for (int i = 0 ; i < MAX_BUTTONS; i++){ 
     Button button = new Button(this); 
     button.setText("Test" + i); 
     button.setOnClickListener((View.OnClickListener) this); 
     buttonsContainer.addView(button); 

     if (i != MAX_BUTTONS - i){ 
      buttonsContainer.addView(new Space(this),new ViewGroup.MarginLayoutParams(buttonsSpacing,buttonSize)); 
     } 

    } 

因爲要創建按鈕編程,你可能要檢查this答案創建的LayoutParams。

編輯:我想提到我同意Bryan Mill的答案,如果你的Activity實現了View.OnClickListener,你可以通過僅傳遞上下文來構造你的監聽器,例如button.setOnClickListener(this),以及你可能打算寫(if!= MAX_BUTTONS - 1)而不是-i。

+0

它的工作,謝謝 – Akanni

相關問題