1. 程式人生 > >Android按鈕實現點選事件的幾種方式

Android按鈕實現點選事件的幾種方式

此方法整體看上去簡單易懂,個人比較常用

xml佈局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.button.MainActivity" >
 
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕" />
 
</LinearLayout>

java程式碼

public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 找到按鈕控制元件
		Button button = (Button) findViewById(R.id.button);
		// 匿名內部內方式設定點選事件
		button.setOnClickListener(new OnClickListener() {
 
			@Override
			public void onClick(View v) {
				//在螢幕上顯示提示 Toast 吐司
				Toast.makeText(MainActivity.this, "匿名內部內方式", Toast.LENGTH_SHORT).show();
			}
		});
	}
}

在多個控制元件都需要實現事件監聽時,可見將匿名物件抽取出來,避免多次建立物件佔用資源

public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 1.找到按鈕控制元件
		Button button = (Button) findViewById(R.id.button);
		// 3.設定按鈕點選事件
		button.setOnClickListener(onClickListener);
	}
	// 2.得到 OnClickListener 物件
	OnClickListener onClickListener = new OnClickListener() {
 
		@Override
		public void onClick(View v) {
			// 可以使用 switch 通過匹配控制元件id 設定不同的按鈕提示不同內容
			// view.getId() 得到點選的控制元件的id
			switch (v.getId()) {
			case R.id.button:
				Toast.makeText(MainActivity.this, "可以使用設定不同內容", Toast.LENGTH_SHORT).show();
				break;
			case 2:
				// 省略
				break;
			default:
				break;
			}
		}
	};
}

二.實現OnClickListener介面重寫onClick方法

此方法適合用於多個控制元件實現點選事件監聽

public class MainActivity extends Activity implements OnClickListener{
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 1.找到按鈕控制元件
		Button button = (Button) findViewById(R.id.button);
		// 3.按鈕設定點選事件
		button.setOnClickListener(this);
	}
 
	@Override
	public void onClick(View v) {
		// 2.實現OnClickListener介面,然後重寫onClick方法
		Toast.makeText(MainActivity.this, "實現OnClickListener", Toast.LENGTH_SHORT).show();		
	}
}

此方法也可以自己建立一個類實現 OnClickListener介面

public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 1.找到按鈕控制元件
		Button button = (Button) findViewById(R.id.button);
		// 3.按鈕設定點選事件
		button.setOnClickListener(new myOnclickLister());
	}
	
	// 2.自己建立類實現OnClickListener介面,然後重寫onClick方法
	class myOnclickLister implements OnClickListener {
 
		@Override
		public void onClick(View v) {
			Toast.makeText(MainActivity.this, "實現OnClickListener", Toast.LENGTH_SHORT).show();
		}
	}
}

三.XML種設定按鈕的OnClick屬性

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.button.MainActivity" >
 
    <Button
        android:onClick="btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按鈕" />
 
</LinearLayout>

然後在java程式碼種建立onClick屬性對應名字的方法

public class MainActivity extends Activity {
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	//定義與XML種OnClick屬性名字對應的方法 注意在方法引數種加上 View v
	public void btn(View v) {
		Toast.makeText(MainActivity.this, "設定Onclick屬性", Toast.LENGTH_SHORT).show();
	}
}

此方法雖然挺方便,程式碼簡潔,但因為方面命名問題不易讓他人讀懂,且在多個控制元件種不方法使用。