一、Spinner(下拉列表组件):
设置监听器为:setOnItemSelectedListener
设置动画效果为:setOnTouchListener
适配器为:ArrayAdapter
二、ImageView(显示图像组件):
设置监听器为:setOnClickListener
盛放图片资源的容器为:Bitmap
三、Button(普通按钮组件):
设置监听器为:setOnClickListener
四、GridView(一个在平面上可显示多个条目的可滚动的视图组件):
设置监听器:setOnItemClickListener
五、ListView(通过竖滚动条查看的列表视图):
设置监听器:setOnItemClickListener
六、RadioGroup(盛放多个RaidoButton容器的组件) :
设置监听器:OnCheckedChangeListener
七、EditText (文本编辑组件):
设置监听器:addTextChangedListener
以Button为例,举例监听的四种方法
首先给出本次的xml代码:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:gravity="center">
-
- <Button
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button" />
-
- <Button
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Button" />
-
- </LinearLayout>
1)通过匿名类实现事件监听
- public class MainActivity extends Activity {
-
-
- Button btn1 = (Button)findViewById(R.id.button1);
- Button btn2 = (Button)findViewById(R.id.button2);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- btn1.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();
-
- }
- });
- btn2.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
-
- Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();
- }
- });
- }
- }
2)自定义事件监听类
- public class MainActivity extends Activity {
-
- Button btn1, btn2;
-
- class MyClickListener implements OnClickListener {
-
- @Override
- public void onClick(View v) {
-
- switch (v.getId()) {
- case R.id.button1:
- Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();
- break;
- case R.id.button2:
- Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- }
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- btn1 = (Button) findViewById(R.id.button1);
- btn2 = (Button) findViewById(R.id.button2);
-
- btn1.setOnClickListener(new MyClickListener());
- btn2.setOnClickListener(new MyClickListener());
- }
- }
3)通过MainActivity类实现OnClickListener接口来完成对控件的事件监听
- public class MainActivity extends Activity implements OnClickListener {
- Button btn1 = null;
- Button btn2 = null;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btn1 = (Button)findViewById(R.id.button1);
- btn2 = (Button)findViewById(R.id.button2);
-
- btn1.setOnClickListener(this);
- btn2.setOnClickListener(this);
- }
-
-
- @Override
- public void onClick(View v) {
-
- switch (v.getId()) {
- case R.id.button1:
- Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();
- break;
- case R.id.button2:
- Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- }
- }
4)在XML文件中“显示指定按钮的onClick属性,这样点击按钮时会利用反射的方式调用对应Activity中的click()方法”
- public class zhulei extends Activity implements OnClickListener {
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
-
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
-
- public void onClick(View v) {
-
- switch (v.getId()) {
- case R.id.button1:
- Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();
- break;
- case R.id.button2:
- Toast.makeText(MainActivity.this, "This is Button 222", Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- }
- }
就这四种方法而言,少量控件使用匿名类比较便捷,较多控件时使用MainActivity 类实现OnClickListener接口的方式更好一些,看起来也更加统一,此外第四种写法将减少在活动中的代码量,但需要在每个控件里添加一条属性,所以大家在选择时可以依情而定。