在android应用中,Button的点击极为常见,使用频率非常的高。在事件点击事件时我们需要为Button绑定监听器。android在实现Button点击事件时提供了诸多方法,在这里就不一一列举,仅就几种常用的方法给予讨论。

一、匿名内部类作为事件监听器类。

有时候,当事件监听器只需使用一次时,此时使用匿名内部类作为事件监听器类是最合适的,实际上,这种监听器形式的使用确实是很广泛的。

public class MainActivity extends Activity {
	private Button button = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.btn);
		button.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "使用匿名内部类做为监听器", 0).show();
			}
		});
	}


二、内部类作为监听器

此方法是将事件监听器类定义成当前类的内部类。1、使用内部类可以在当前类中复用监听器类,因为监听器类是外部类的内部类,2、所以可以自由访问外部类的所有界面组件。这也是内部类的两个优势。简单地说是时间监听器可以在不同的控件上再用,且实现非常简单,只需加上一句button.setOnClickListener(new neibulei());即可,简单应用。

public class MainActivity extends Activity {
	private Button button = null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button);
		button.setOnClickListener(new neibulei());
	}
	private class neibulei implements OnClickListener {
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "使用内部类做为监听器", 0).show();
		}
	}


三、Activity本身作为事件监听器



此种办法直接在Activity中定义事件处理器的方法。在Activity类实现了OnClickListener事件监听接口,从而可以在该Activity类中直接定义事件处理器方法:onClick(view v),当为某个组件添加该事件监听器对象时,直接使用this作为事件监听器对象即可。

public class MainActivity extends Activity implements OnClickListener {
	private Button button = null;
	private Button button1 = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button);
		button1 = (Button) findViewById(R.id.button1);
		button.setOnClickListener(MainActivity.this);
		button1.setOnClickListener(MainActivity.this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.but:
			Toast.makeText(this, "使用activity本身作为事件监听器", 0).show();
			break;
		case R.id.but1:
			Toast.makeText(this, "使用activity本身作为事件监听器1", 0).show();
			
			break;

		default:
			break;
		}

	}

}




四、直接绑定到标签

此方法是直接在布文件中为监听事件绑定标签,实现也更为简单,如

<Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="点击" 
        android:onClick="click"/>


之后在java文件中:

public class MainActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);	
	}

	public void click(View view){
		Toast.makeText(MainActivity.this, "直接绑定到标签", 0).show();
	}


这四种方法较为常用,其他的如外部类作为监听器等由于本人没使用过,不是很熟悉,在这里就不作介绍。