2012-01-16 84 views
2

我與我的android點擊監聽按鈕一些非常奇怪的麻煩!我已經做了好幾次了,我瘋了,沒有爲這個錯誤找到一個解決方案(既不是合理的解釋)。單擊安卓按鈕聽衆按鈕不工作

錯誤 我的活動上的2個按鈕的事件處理程序沒有被執行。沒有錯誤,它只是沒有在運行時執行處理程序動作。這是一個按鈕的代碼:

btnNext = (Button) findViewById(R.listclient.btnnext); 
btnNext.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Toast.makeText(MyActivityClassName.this, "Flag 01", 1).show(); 
          btnNext.setText("CLICKED!"); 
     } 
    }); 

這就是XML的佈局按鈕:

<Button android:id="@+listclient/btnnext" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:clickable="true" 
      style="@style/Widget.TextViewInfo" 
      android:text="Next" 
      /> 

信息

  • 也有這個活動裏面的ImageButton的,這imageButton完美地與一個內部的OnClickListener類(就像這個一樣)。
  • 我已經試圖讓我的活動類繼承OnClickListener,並將它設置爲按鈕的點擊偵聽器,但沒有成功。
  • 我也在我的Activity類中創建了一個類,並將其設置爲按鈕點擊偵聽器,但也沒有成功。

我編譯爲Android 2.1 +谷歌API(SDK 7)

------------ EDITED ------------- ----

如果我把我的代碼:

btnNext.performClick(); 

它的執行!我現在變得更瘋狂了! 當我觸摸它時,實際上點擊了按鈕,我可以看到按鈕「動畫」,並且點擊被記錄在LogCat中。

回答

8

指定或使用id時,不能使用listclient。第一部分是資源的類型,您的情況必須是id

更改android:id="@+listclient/btnnext"android:id="@+id/btnnext"。還可以調整你的代碼:

btnNext = (Button) findViewById(R.id.btnnext); 
+0

我的應用程序真的很大(大約50項活動),在很多情況下,我們在不同的活動中使用相同的按鈕名稱。爲了防止使用「id /」實現大量的小部件引用,我們使用佈局的名稱來分隔小部件。例如,我在其他2個佈局中有一個「btnext」。 但我試過你的建議,它仍然無法正常工作。 – IPValverde 2012-01-16 15:58:49

+2

兩種解決方案:a)以不同的方式加前綴,比如'android:id =「@ + id/listclient_btnnext」'(然後在代碼中使用'R.id.listclient_bttnnext')。或者b)不關心和重複使用它們。 'findViewById()'只在當前視圖層次(=可見佈局)中搜索。因此,如果您有3種不同佈局的活動,則無關緊要。它會找到與活動佈局相關的一個。 (這就是爲什麼''findViewById()''總是返回'null',如果你在'setContentView()'之前調用它,那麼沒有視圖層次結構) – user287351 2012-01-16 16:01:17

+0

嗯......+1 我不知道!我認爲使用「id /」更好。 但不幸的是,它不是問題,因爲更改引用並沒有使clickEvent被調用。 – IPValverde 2012-01-16 16:06:27

0

快速瀏覽了你的代碼,我注意到當你沒有正確地調用findViewById。將Button的ID更改爲「test」,然後嘗試:findViewById(R.id.test)。合理?