Android学习笔记——给Button添加监听器(四)

方式1:创建成员内部类


    //1:创建内部类
    class ButtonListener implements OnCickListener{
    
      //重写OnClick方法
      @Override
      public void onClick(View v){
            
            // 该方法将在绑定的按钮被点击时调用,v对象为绑定的控件
			// 吐司使用方法:1,当前界面对象(上下文环境),2,显示内容,3、吐司显示时长
			Toast.makeText(MainActivity.this, "按钮被点击啦!!", Toast.LENGTH_SHORT).show();
        }
    }
    /*
	 * 为按钮添加监听器 第一步:XML布局文件中添加<Button />控件并为其设置id
	 * 第二步:在java代码中(需要显示该控件的Activity中), 通过setContentView,装载Button所在的XML布局。
	 * 第三步:通过Button的id在Activity中获取到Button的对象 
	 * 第四步:为button按钮添加监听事件
	 * a:创建内部类并实现OnClickListener接口
	 * b:重写onClick方法(当按钮被点击后想干什么)
	 * c:生成内部类对象
	 * d:为按钮添加监听器
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 第二步
		setContentView(R.layout.activity_linearlayout);
		// 第三步
		button01 = (Button) findViewById(R.id.btn01);
		//生成监听器(内部类)类的对象
         MyButtonListener myButtonListener=new MyButtonListener();
         //第四步 为按钮添加监听器
         button01.setOnClickListener(myButtonListener);
	}

方式2:创建匿名内部类

/*
	 * 第一步:获取Button对象
	 * 第二步:直接调用button的setOnClickListener方法
	 *              a,在方法中,传入new OnClickListener(){
	 *                     onClick(){
	 *                     }
	 *              }
	 * 匿名内部类以及内部类形式,这两种方式在开发中最常用。
	 */
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_linearlayout);
		btn = (Button) findViewById(R.id.btn01);
		btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 当按钮点击时调用
				Toast.makeText(SecondActivity.this, "按钮已被点击(匿名内部类)",
						Toast.LENGTH_LONG).show();
			}
		});
	}

方式3:Activity直接实现监听接口

public class ThirdActivity extends Activity implements OnClickListener {
	/*
	 * 第一步:获取到Button按钮对象
	 * 第二步 : 直接使Activity实现OnClickListener接口
	 * 第三步:重写onClick方法
	 * 第四步:为按钮添加监听器(传入this)
	 */
	private Button btn;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_linearlayout);
		btn = (Button) findViewById(R.id.btn01);
		btn.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// 当按钮被点击时调用
		Toast.makeText(ThirdActivity.this, "按钮已被点击(Activity直接实现接口)",
				Toast.LENGTH_LONG).show();
	}
}

方式4:通过XML布局文件定义onClick属性

    /*
	 * 第一步:xml布局文件中,为button添加onclick属性
	 * 第二步:在对应的Activity中,创建一个以onclick属性值为名字的方法
	 *               a:修饰符为public
	 *               b:返回值为void
	 *               c:传入参数为View类型
	 */
	               
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_linearlayout);
	}

	public void MyButtonClick(View v) {
		// 将在btn01按钮被点击时调用
		Toast.makeText(FourthActivity.this, "按钮已被点击(xml布局文件中定义)", Toast.LENGTH_LONG)
				.show();
	}


activity_linearlayout.xml文件:
<Button
        android:id="@+id/btn01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/blue"
        android:onClick="MyButtonClick"
        android:text="按钮1"
        android:textColor="@color/cyan" 
        android:layout_marginBottom="5dp"/>

附加:多按钮使用用一个监听器

public class SixthActivity extends Activity {
	// 通过创建内部类为多个按钮添加监听器
	/*
	 * 创建内部类实现OnClickListener接口
	 * onClick方法中,通过switch(R.id.xxx)方式区别当前被点击的按钮是哪个
	 * 之后再对相应的按钮做不同的处理
	 */
	private Button btn01, btn02;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_linearlayout);
		btn01 = (Button) findViewById(R.id.btn01);
		btn02 = (Button) findViewById(R.id.btn02);
		ButtonsListener btnButtonsListener = new ButtonsListener();
		btn01.setOnClickListener(btnButtonsListener);
		btn02.setOnClickListener(btnButtonsListener);
	}

	class ButtonsListener implements OnClickListener {

		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btn01:
				Toast.makeText(SixthActivity.this, "已点击第一个按钮",
						Toast.LENGTH_LONG).show();
				break;
			case R.id.btn02:
				Toast.makeText(SixthActivity.this, "已点击第二个按钮",
						Toast.LENGTH_LONG).show();
				break;

			}

		}

	}
}

activity_linearlayout.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/btn01"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/blue"
        android:onClick="MyButtonClick"
        android:text="按钮1"
        android:textColor="@color/cyan" 
        android:layout_marginBottom="5dp"/>

    <Button
        android:id="@+id/btn02"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/blue"
        android:text="按钮2"
        android:textColor="@color/cyan" />

</LinearLayout>

猜你喜欢

转载自my.oschina.net/u/3734228/blog/2872454
今日推荐