2014-09-26 137 views
0

我對Android開發非常新,我仍然閱讀文檔。順便說一句,我試圖添加一個事件,當我點擊一個按鈕。下面的代碼:Android onClick事件不起作用

<Button 
    android:id="@+id/button1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/editText1" 
    android:layout_below="@+id/editText1" 
    android:layout_marginTop="24dp" 
    android:text="Execute" 
    android:onClick="onClickRadGard" /> 

我宣佈onClickRadGrad這樣:

public class MainActivity extends ActionBarActivity { 

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

    buttonx.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      // Perform action on clicks 

     } 
    }); 

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

我不知道哪來的問題,因爲Eclipse的告訴我: enter image description here

你有任何建議?你可以在這裏找到完整的代碼:link

+1

由於您在xml中爲'Button'定義了'android:onClick =「onClickRadGard」',因此不需要在Java中設置'OnClickListener'。 [見這裏](http://stackoverflow.com/questions/18319711/android-eclipse-which-is-the-best-way-to-add-a-button/18319759#18319759) – codeMagic 2014-09-26 20:50:37

回答

5

幾點建議:

你宣佈你的XML android:onClick="onClickRadGard"。這意味着您的活動將期望找到具有以下簽名的方法:

public void onClickRadGard(View view) { 

} 

如果未聲明您的應用程序將崩潰。當你按下你的android:id="@+id/button1"時,這個方法會被調用,所以你不需要調用setOnClickListener就可以了。

關於編譯時錯誤,我看了一下你在鏈接中發佈的代碼。這兩條線都以setContentView之後被定義,在onCreate

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

buttonx.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    //other code 
    } 
}); 
2
buttonx.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
     // Perform action on clicks 

    } 
}); 

廣場內onCreate()下面setContentView(..)你上面的代碼。

此外,由於您在您的活動中定義了onClickListener,因此您可以從xml中刪除android:onClick="onClickRadGard"

+0

呵呵。謝謝弗蘭克。我會編輯我的答案:) – 2014-09-26 21:01:06

2

身體你應該要麼只是指定android:onClick="onClickRadGard",然後做

public class MyActivity extends Activity 
{ 
    ... 

    public void onClickRadGard(View v) 
    { 
     ///code here 
    } 
} 

或者,如果你在XML中指定它,但僅限於一個監聽器:

public class MyActivity extends Activity 
{ 
    .... 

    Button button1; 

    @Override 
    public void onCreate(Bundle saveState) 
    { 
     super.onCreate(saveState); 
     setContentView(R.layout.activity_my); 
     button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(new OnClickListener() 
     { 
      @Override 
      public void onClick(View view) 
      { 
       //code here 
      } 
     }); 
    } 
    ... 
} 

或如此:

public class MyActivity extends Activity implements View.OnClickListener 
{ 
    .... 

    Button button1; 

    @Override 
    public void onCreate(Bundle saveState) 
    { 
     super.onCreate(saveState); 
     setContentView(R.layout.activity_my); 
     button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) 
    { 
     if(view == button1) 
     { 
      ///code here 
     } 
    } 
}