1. 程式人生 > >Android學習筆記——給Button新增監聽器(四)

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>