2011-04-04 56 views
0

我有9(編程生成)按鈕。我這樣做是爲所有的人:如何在循環中設置按鈕佈局參數?

Button btnButton1 = new Button(this); 
btnButton1.setText(getText(R.string.button_1)); 
btnButton1.setTextSize(BUTTON_TEXT_SIZE); 
btnButton1.setHeight(BUTTON_HEIGHT); 
btnButton1.setWidth(BUTTON_WIDTH); 
btnButton1.setOnClickListener(buttonClicked(btnButton1)); 

(其中buttonClicked是這樣的:

private final View.OnClickListener buttonClicked(final Button button) 
    { 
    return new View.OnClickListener() 
    { 
     public void onClick(View v) 
     { 
     tvButtons.append(button.getText().toString()); 
     } 
    };   
    }; 

和tvButtons是一個TextView 。)

有沒有一種方法,我可以這樣做:

for (button : buttons) 
{ 
    button.setText &c. &c. 
} 

減少重複的代碼?

回答

3

首先,我想說你的onClick監聽器過於複雜。我會重構它看起來像這樣:

public void onClick(View v) 
{ 
    tvButtons.append(((Button)v).getText().toString()); 
} 

然後,你可以簡單地每個按鈕的onclick監聽器設置爲實現該方法,而不用提供該按鈕對象的類。

然後,我會做什麼米卡建議,並在方法中封裝代碼的重複部分。此外,還可以按如下方式創建中的strings.xml數組:

<string-array name="buttonStrings"> 
    <item>String1</item> 
    <item>String2</item> 
    <item>String3</item> 
</string-array> 

然後就可以檢索使用

getResources().getStringArray(R.array.buttonStrings); 

和遍歷該數組,調用每個元件上的createButton方法。整個事情應該看起來像這樣:

public class MyActivity extends Activity implements OnClickListener { 

    public onCreate() { 
     String[] strings = getResources().getStringArray(R.array.buttonStrings); 

     for(int i=0;i<strings.length;++i) { 
      createButton(strings[i]); 
     } 
    } 

    private Button createButton(String s) { 
     Button b = new Button(this); 
     b.setText(s); 
     b.setTextSize(BUTTON_TEXT_SIZE); 
     b.setHeight(BUTTON_HEIGHT); 
     b.setWidth(BUTTON_WIDTH); 
     b.setOnClickListener(this); 
     return b; 
    } 

    @Override 
    public onClickListener(View v) { 
     tvButtons.append(((Button)v).getText().toString()); 
    } 
} 

希望幫助!

+0

太棒了!謝謝! – 2011-04-05 07:49:32

0

只需創建一個方法createButton(int textResourceId),該方法完成所有工作,並使用文本ID對它進行九次調用。

+0

你不需要傳遞一個引用按鈕嗎?因此,'createButton(Button btn,int textResourceId)' – 2011-04-04 16:38:45

+0

@ dave.c否,該按鈕將在方法本身中創建。從本的代碼中,他參與了活動,這就是他所需要的。 – 2011-04-04 16:57:03

+0

啊你是對的,我誤解了這個問題。 – 2011-04-04 17:11:08