【AndroidUI开发-事件监听的五种写法】

  1. 专门创建一个实现了 xxx事件监听器接口 的对象 如:Monitor1,然后 button1.setOnXXX-Listener(monitor1); 即可 【内部类】

    Button button1 =Button)findViewById(R.id.button1);
    
    class MyMonitor implements View.OnClickListener(){
          
          
    	
    	public void onClick(View v){
          
          
    		switch(v.getId()){
          
          
    			case R.id.button1 : button1.setText("我被单击了!"); break;
    			case.......
    		}
    		
    	}
    }
    
    MyMonitor myMonitor = new MyMonitor();					//创建监听器对象
    
    button1.setOnClickListener(myMonitor);					//为 button1,指定单击事件监听器对象
    
  2. 将当前类实现监听器接口,然后 button1.setOnXXX-Listener(this); 则在当前类中 还得实现监听器接口的 抽象方法(也就是事件的处理方法)。

  3. 使用匿名内部类的方法

    	View.OnClickListener myMonitor = new View.OnClickListener(){
          
          		//myMonitor 为 接口类型的引用变量,用于指向实现了该接口类型的 实现类的 对象
    
    		@Override   	//@Override 注解 : 一来便于阅读,二来防止写错重写方法,而被误认为是新方法。导致重写失败!】
    
    		public void onClick(View v){
          
          
    
    			button1.setText("我被单击了!");
    		}
    
    	}// 此处是 创建了一个匿名内部类 【注意 ()内部类中】
    
    	Button button1 = (Button) findViewById(R.id.button1);
    	
    	button1.setOnClickListener(myMonitor);
    
  4. 实际上与方式三,原理相同,只是代码简洁! 【在java中 事件适配器(或监听器)也是常用这种方式指定】

    Button button1 =ButtonfindViewById(R.id.button1);
    
    button1.setOnClickListener(new View.OnClickListener(){
          
          		// 也是创建 实现了View.OnClickListener接口的 匿名内部类
    
    	@Override    //【在jdk1.6时才能这样写,否则就不能写@Override,因为1.6以下不支持实现接口中的方法时 使用@Override 】
    	public void onClick(View v){
          
          
    
    		button1.setText("我被单击了!");
    	}
    }); 
    
  5. 利用反射机制来实现,既不用find控件也不用设置监听器------但是不推荐使用

    在布局文件中 为(View)控件设置 onclick属性,然后在布局对应的Activity中写一个 用onclick属性值为名的 方法,
    必须要 public,传一个View类型的参数。 --------比较适合做简单的测试。不常用

    • 布局文件:
      	<Button
          android:onClick="onClickButton1"
          android:id="@+id/button1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="利用反射机制触发事件处理方法" />
      
    • XXXActivity 中:
      public void onClickButton1(View view){
              
              
      	Toast.makeText(MainActivity.this, "你点击了button1", Toast.LENGTH_SHORT).show();
      }
      

猜你喜欢

转载自blog.csdn.net/UserFrank/article/details/129204941