2013-04-17 62 views
0

我初始化一個按鈕的OnClick沒有得到真正的按鈕ID

按鈕按鈕1 = NULL;

在我的活動開始。 佈局確定後,我做

final Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(this); 

的onclick看起來像

public void onClick(View v) { 
     if(v == button1) {System.out.println("asd");}; 
     System.out.println(v); 
    } 

打印顯示"I/System.out(22758): [email protected]**405632f0**"和當然的println( 「ASD」)顯示不出來。

我不想讓按鈕@**代碼爲每個單一的按鈕,因爲使用id當然是更容易。

有人在想法我做錯了什麼?

+1

試試v.equals(button1)而不是==。 –

回答

2

代替這種

public void onClick(View v) { 
     if(v == button1) {System.out.println("asd");}; 
     System.out.println(v); 
    } 

使用本

public void onClick(View v) { 
     if(v.getId() == R.id.button1) {System.out.println("asd");}; 
     System.out.println(v); 
    } 

WHY ??

因爲當你使用'=='進行比較時,它比較了兩個對象,它們是相同的引用。我檢查兩個對象是否指向相同的內存。

要解決這個問題,你可以檢查他們的ID很容易比較。

+0

謝謝大家,所有的解決方案都有效。我會將所有標記爲答案。傻我。感謝v.getId()更好的建議,將來會使用它。祝你有個愉快的日子 – user2161301

+0

查看更新的答案的詳細信息..請acceept,如果我們的答案是有幫助的 – stinepike

+0

對不起,有一段時間,我afk幾個小時 – user2161301

1

R.id.button1實際上是一個整數R.java,它不是一個字符串或其他任何可以被截斷爲button1。而是使用:

if(v.getId() == R.id.button1) 

而且在Java中,你不能使用==測試對非原始對象平等,你必須使用equals()。閱讀關於How do I compare strings in Java?的差異

+0

謝謝你們,所有的解決方案工作。我會將所有標記爲答案。傻我。感謝v.getId()更好的建議,將來會使用它。祝你有個愉快的日子 – user2161301

1

button1爲空。所以你比較null和not null。 更改此:

final Button button1 = (Button) findViewById(R.id.button1); 

到:

button1 = (Button) findViewById(R.id.button1); 

,它會工作。但是你最好比較R.id.button1和v.getId()數字。沒有看到自己。

+0

謝謝你們,所有的解決方案都可以工作。我會將所有標記爲答案。傻我。感謝v.getId()更好的建議,將來會使用它。祝你今天愉快 – user2161301

1

爲@Leonidos說,變化:

final Button button1 = (Button) findViewById(R.id.button1); 

到:

button1 = (Button) findViewById(R.id.button1); 

,是的,你可以比較參考:如果你看到Android的來源有兩種策略:有些人比較崇敬如:

if (v == mSomeButton) { 

和一些使用id l ike:

if (v.getId() == R.id.some_button) {