在安卓開發中,對按鈕添加監聽,是每一個app都需要用到的。通常我們會用三種辦法來對按鈕進行監聽。下面我們哎說說着三種。我個人是比較喜歡匿名內部類的方法的。
第一種,匿名內部類
匿名內部類一般通過以下代碼完成,顧名思義,通過傳入匿名內部類來實現監聽並寫出對應的事件處理
btButton.setOnClickListener(new OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show(); } });
第二種,通過當前類實現OnClickListener接口並在其必須實現的onClick方法中添加事件
public class MainActivity extends Activity implements OnClickListener ======================================== btButton2.setOnClickListener(this); @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show(); }
第三種,在布局文件中添加 android:onClick屬性來實現。這種和javascript的onclick寫法是一樣的,屬性后面的值是方法名稱。定義好后,需要在onCreate()方法中寫出該方法,並且該方法必須用View 作為參數傳入。比如你定義了 android:onClick="sing",那么你就必須在當前類中寫上 sing(view v)方法。
<Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt3" />
下面我們看看我寫的Demo,
先看運行截圖吧
然后是源代碼
首先是布局文件activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.buttononclik.MainActivity" > <Button android:id="@+id/bt1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/bt1" /> <Button android:id="@+id/bt2" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/bt2" /> <!-- 注意,下面兩個按鈕多了android:onClick屬性。這個屬性的作用就是當被點擊 時候就調用設置的方法,"@string/method" 方法名可以隨便起,這里我們引用 "@string/method",值為onclickMethod。這個一點和javascript很像。也就 是說,其實這里我們是不通過findViewById()來取得按鈕的。所以id是可以不用 設置的。那么下面我們設置id是因為我用了兩個按鈕,並着倆個按鈕的 android:onClick屬性都設置為onclickMethod,所以如果要對相同方法名,我們 需要id作為判斷,如果方法名設置為不一樣,我們完全可以不用設置id。 這個方法需要在當前類中寫上對於的方法來處理監聽事件。 --> <Button android:id="@+id/bt3" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt3" /> <Button android:id="@+id/bt4" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@string/method" android:text="@string/bt4" /> </LinearLayout>
然后是java文件 MainActivity.java
package com.example.buttononclik; import android.annotation.SuppressLint; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements OnClickListener{ //定義要用到的屬性 private Button btButton; private Button btButton2; private String tipsString; private String tipsString2; private String tipsString3; private String tipsString4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //加載布局文件 setContentView(R.layout.activity_main); btButton = (Button) findViewById(R.id.bt1); tipsString = this.getString(R.string.tips); tipsString2 = this.getString(R.string.tips2); tipsString3 = this.getString(R.string.tips3); tipsString4 = this.getString(R.string.tips4); btButton2 = (Button) findViewById(R.id.bt2); /*當前類實現了OnClickListener接口, 所以我們可以傳入當前類對象this作為參數,並在下面方法寫事件*/ btButton2.setOnClickListener(this); //通過setOnClickListener方法並傳入匿名內部類OnClickListener來實現監聽 btButton.setOnClickListener(new OnClickListener() { @SuppressLint("ShowToast") @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this,tipsString,Toast.LENGTH_SHORT ).show(); } }); } //這個是繼承了OnClickListener方法所要實現的方法,監聽事件可以在這個方法寫 @Override public void onClick(View v) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, tipsString2, Toast.LENGTH_SHORT).show(); } public void onclickMethod(View v){ int id = v.getId(); switch (id) { case R.id.bt3: Toast.makeText(MainActivity.this,tipsString3 , Toast.LENGTH_SHORT).show(); break; case R.id.bt4: Toast.makeText(MainActivity.this,tipsString4 , Toast.LENGTH_SHORT).show(); break; default: break; } } }
然后是字符串文件strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">buttonOnclik</string> <string name="hello_world">Hello world!</string> <string name="action_settings">Settings</string> <string name="bt1">內部類實現監聽</string> <string name="tips">通過匿名內部類實現監聽</string> <string name="bt2">通過實現OnCllickListener接口實現監聽</string> <string name="tips2">通過實現OnClickListener接口添加監聽</string> <string name="method">onclickMethod</string> <string name="bt3">通過設置Onclick屬性監聽</string> <string name="bt4">作用是為了用id區分bt3</string> <string name="tips3">如果不是有要區別兩個相同Onclick屬性的按鈕,id可以不用設置</string> <string name="tips4">第四個按鈕被點擊了</string> </resources>