android学习之控件的事件监听的四种写法

android中很多控件的事件监听都不只有一种写法,这里我以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
	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);
        //通过匿名内部类实现button的事件监听
        btn1.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this, "This is Button 111", Toast.LENGTH_SHORT).show();
				
			}
		});
        btn2.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				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) {
	      // TODO Auto-generated method stub
	      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) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn1 = (Button)findViewById(R.id.button1);
		btn2 = (Button)findViewById(R.id.button2);
		//Onclick方法在哪个类中那么监听事件的参数就是那个类
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
	}

	//	btn1.setOnClickListener(l);
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      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) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	//不需要@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
	      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接口的方式更好一些,看起来也更加统一,此外第四种写法将减少在活动中的代码量,但需要在每个控件里添加一条属性,所以大家在选择时可以依情而定。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值