2011-10-19 43 views
-1

我在XML中創建了一個完整的佈局設置,然後嘗試使用findViewById()將偵聽器附加到按鈕上。我現在遇到的問題是,我收到的方法查看參數不包含我點擊視圖的ID:830009633920 VS 2131099657.安卓視圖ID不正確

Button btnNext = (Button)findViewById(R.id.btnNext); 
btnNext.setOnClickListener(this); 

@Override 
public void onClick(View view) { 
    if (view.getId() == R.id.btnNext) { 
       ... 
    } 
} 
+0

您的問題不能沒有一些代碼至少粘貼來回答...... –

+0

你從生成的資源代碼'R' ID比較在調試視圖的對象ID? –

+0

是的,我認爲這就是我如何抓住它。我猜這是不正確的,但爲什麼? –

回答

1

如何:

Button btnNext = (Button)findViewById(R.id.btnNext); 
btnNext.setOnClickListener(this); 

@Override 
public void onClick(View view) 
{ 
    switch (view.getId()) 
    { 
    case R.id.btnNext: 
     ... 
     break; 

    case R.id.foo: 
     ... 
     break; 
    } 
} 
+0

這將證明是複雜的,稍微煩人,因爲我正在爲80+項目(按鈕,EditText等),爲其每個相關的偵聽器執行此操作。我有onClick方法最終將有一個約20個按鈕的開關(或if)語句。 –

+0

@ scott.smart編輯答案。試試看。 –

+0

那就是我遇到的問題:按鈕Next的'view.getId()'不是R.id.btnNext。 –

0

那應該是有效的,所以我唯一的猜測是沒有看到代碼或佈局的其餘部分,就是你已經在兩個重疊的項目上設置了點擊處理程序。

如果您打算將Android庫項目切換爲這樣,由於工具鏈中最近發生的變化而無法工作。

http://tools.android.com/tips/non-constant-fields

總的來說,我發現這是更簡單的使用匿名類,而手柄點擊次數超過大單處理器。

btnNext.setOnClickListener(new OnClickListener() 
    { 
     @Override 
     public void onClick(View view) 
     { 
      ... 
     } 
    }); 

你可以試試這個方法只是爲了調試你希望得到的點擊產品您按一下,以確保你沒有佈局問題。

+0

試過了,結果相同。傳遞給onClick的視圖與R.id.btnNext不同。 –

+0

我一般也是這條路線。在我的腦海中,這樣做更有意義,然後有一個onClick並使用開關來確定哪個被點擊。也是這樣每個按鈕都有自己的監聽器。因此,不需要檢查傳遞給您的視圖。你知道,如果onClick()被調用,它來自唯一可能的按鈕。 – FoamyGuy

+0

如果傳遞給單數匿名內部類的視圖不等於您分配處理程序的視圖,那麼似乎有一些關鍵細節沒有與您共享,包括佈局,活動視圖構造,自定義視圖或一些重新分配btnNext。除非您提供更多信息,否則任何人都不可能提供幫助。 在正常情況下,所列出的所有方法都可以正常工作。 – cistearns

0

嘗試跳過ID,並比較實際的視圖對象。所以是這樣的:

@Override 
public void onClick(View view) { 
    if (view.equals(btnNext)) { 
       ... 
    } 
}