Button點擊事件:大概可以分為以下幾種:
- 匿名內部類
- 定義內部類,實現OnClickListener接口
- 定義的構造方法
- 用Activity實現OnClickListener接口
- 指定Button的onClick的屬性
首先我們簡單地定義一個帶Button的xml布局文件
activity_main.xml:
<Button android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="點擊事件" />
然后再寫Java代碼
MainActivity.java:
1.匿名內部類
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt = (Button) findViewById(R.id.bt1); //1.匿名內部類 bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("匿名內部類", "點擊事件"); } });
}
2.定義內部類,實現OnClickListener接口
public class MainActivity extends Activity{ private Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(new MyListener()); } //定義內部類,實現OnClickListene接口 class MyListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("定義內部類,實現OnClickListene接口", "點擊事件"); } }
}
3.定義的構造方法
public class MainActivity extends Activity{ private Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt = (Button) findViewById(R.id.bt); myListener(); } //定義構造方法 private void myListener() { // TODO Auto-generated method stub bt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("定義構造方法", "點擊事件"); } }); } }
4.用Activity實現OnClickListener接口
public class MainActivity extends Activity implements OnClickListener { private Button bt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(this); } //用Activity實現OnClickListener接口 @Override public void onClick(View v) { // TODO Auto-generated method stub Log.i("用Activity實現OnClickListener接口", "點擊事件"); } }
5.指定Button的onClick的屬性:
先在layout文件中指定onClick屬性,然后到Activity中實現這個onButtonClick方法
布局文件:
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="點擊事件" />
Java代碼:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //5指定onClick屬性方式 public void click(View v) { // TODO Auto-generated method stub Log.i("指定onClick屬性方式","點擊事件"); } }
另外,多個按鈕點擊事件的處理,以指定onClick屬性方式為例,獲取其資源id,通過資源id,可以判斷用戶點擊了哪個按鈕了。
布局文件:
<Button android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="點擊事件1" /> <Button android:id="@+id/bt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="點擊事件2" /> <Button android:id="@+id/bt3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="點擊事件3" />/> <Button android:id="@+id/bt4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="點擊事件4" />
Java代碼:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //指定onClick屬性方式 //傳人的View對象,就是用戶按下的那個按鈕對象 public void click(View v) { // TODO Auto-generated method stub //獲取組件的資源id int id = v.getId(); switch (id) { case R.id.bt1: Log.i("指定onClick屬性方式","bt1點擊事件"); break; case R.id.bt2: Log.i("指定onClick屬性方式","bt2點擊事件"); break; case R.id.bt3: Log.i("指定onClick屬性方式","bt3點擊事件"); break; case R.id.bt4: Log.i("指定onClick屬性方式","bt4點擊事件"); break; default: break; } } }
效果如圖: