2017-02-14 75 views
0

我一直在尋找如何動態創建按鈕。最後我得到了它。
但是,我不知道如何對特定創建的Button進行引用。
例如,在我下面的示例中,如何在點擊時將特定Button的文本置於紅色?引用動態創建的按鈕

也就是說,如何把它的ID:

Button button_pulsado = (Button) findViewById(R.id.???????); 
Button.setTextColor(Color.RED); 

這是我的例子:

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     List<String> myList = new ArrayList<String>(); 
     myList.add("A"); 
     myList.add("B"); 
     myList.add("C"); 
     myList.add("D"); 

     for (int i = 0; i < myList.size(); i++) { 
     Button myButton = new Button(this); 
     myButton.setText(myList.get(i)); 

     LinearLayout ll = (LinearLayout) findViewById(R.id.layout1); 
     LinearLayout.LayoutParams lp = new  LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     ll.addView(myButton, lp); 
     } 
    } 
} 
+0

改變文字顏色的治療方法在哪裏?什麼類和方法? –

+0

你想更改哪個視圖?被點擊的按鈕?還是另一種觀點? –

+0

我想改變點擊的按鈕 – FAR

回答

0

要解決的findViewById問題,你可以存儲List<Button>

public class MainActivity extends AppCompatActivity { 
    private List<Button> buttons = new ArrayList<Button>(); 

當你建立你的動態視圖時添加。

ll.addView(myButton, lp); 
buttons.add(myButton); 

使用buttons.get(int position)而不是findViewById


關於...

例如,在下面我舉的例子,我怎麼可能把一個特定的按鈕上的文字爲紅色時,點擊?

將每個按鈕添加到視圖中後,您可以爲每個按鈕設置單獨的點擊偵聽器中的顏色。

class ColorClickListener implements View.onClickListener { 
    private String color; 
    ColorClickListener(String color) { 
     this.color = color; 
    } 
    @Override 
    public void onClick(View v) { 
     // v.setBackground(color); // For example... API may not like this 
    } 
} 

而且從活動

String [] colors = new String[] {"#fff", "#ccc"}; 

for (int i = 0; i < colors.length; i++) { 
    Button b = new Button(this); 
    b.setOnClickListener(new ColorClickListener(Color.parseColor(colors[i]))); 
} 
+0

我不知道如何完整的「buttons.get(int position)」行,你能幫我嗎? – FAR

+0

我不知道你想如何使用按鈕。這只是一個ArrayList。它有一個get方法。你可以用你想要的按鈕的位置來調用它。真的很簡單 –

+0

對不起...打算編輯我​​自己的答案;-( –

1

無需調用findViewById()。該onClickMethod()View參數,它引用了被點擊的觀點:

private changeColorClick = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     buttons.add(myButton); 
     v.setTextColor(Color.RED); 
    } 

} 

現在你的循環內:

for (int i = 0; i < myList.size(); i++) { 
    Button myButton = new Button(this); 
    myButton.setTextColor(myList.get(i)); 
    myButton.setOnClickListener(changeColorClick); 
} 

如果您希望每個按鈕切換到不同的顏色,您可以創建在OnClickListener與構造一個名爲類:

public ColorClick implements OnClickListener() { 
    private Color color; 
    public ColorClick(Color color) { 
     this.color = color; 
    } 
} 

現在你需要一個數組,List,或MapColor對象在施工期間使用OnClickListener。例如,

Color[] colors = new Color[]{Color.RED, Color.GREEN, Color.BLUE}; 
for (int i = 0; i < myList.size(); i++) { 
    Button myButton = new Button(this); 
    myButton.setTextColor(myList.get(i)); 
    myButton.setOnClickListener(new ColorClick(colors[i]); 
} 

或者您可以在按鈕上使用setTag()

+0

@ cricket_007我的壞= p –

+0

謝謝你的建議幫助我解決了我的問題,但是現在又出現了另一個問題:單擊另一個按鈕時,我不知道如何將Button的文本返回原始顏色(黑色)。如果有人幫助我,我會很感激。 – FAR

+0

對不起,我明白了。 – FAR