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

方式1:建立成员内部类java

//1:建立内部类
    class ButtonListener implements OnCickListener{
    
      //重写OnClick方法
      @Override
      public void onClick(View v){
            
            // 该方法将在绑定的按钮被点击时调用,v对象为绑定的控件
			// 吐司使用方法:1,当前界面对象(上下文环境),2,显示内容,三、吐司显示时长
			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:建立匿名内部类android

/*
	 * 第一步:获取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直接实现监听接口ide

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"/>

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

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>
相关文章
相关标签/搜索