安卓开发基础:给控件设置监听事件的几种方法

首先是界面文件xml,以下的所有例子都是使用的这个界面文件:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context="com.lrh.xcyz.myapplication.MainActivity">

    <Button
        android:id="@+id/btn1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="btn1" />
    <Button
        android:id="@+id/btn2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="btn2" />
    <Button
        android:id="@+id/btn3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="btn3" />
    <Button
        android:id="@+id/btn4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="btn4" />
</LinearLayout>

经过一段时间的安卓开发经验,本人发现给控件设置监听事件有大致一下三种:

一:

第一种方法是最经常使用的,也是很方便的

首先绑定控件

<pre name="code" class="java">Button btn1 = (Button)findViewById(R.id.btn1);

 
之后设置监听事件
btn1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
    }
});


二:
第二种也是很常用的方式
首先在界面文件中的控件上写一个OnClick属性
<Button
    android:id="@+id/btn1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="btn1"
    android:onClick="btn1_click"/>


然后在java代码中以这个属性作为函数名,写一个响应函数即可。
public void btn1_click(View view){
        Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
}


使用这种方式的时候要注意,这个函数一定得是public类型的,如果写成private类型的,那么无法成功设置监听事件。
三:
当我们要给界面上的多个空间绑定监听事件的时候,显然像以上两种方式都不是明智之举,难道我界面有一百个控件,你就设置一百个监听事件吗?这个时候第三种方式就很好使用了
首先,在创建这个activity的时候让她实现OnClickListener这个接口
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn1 = (Button)findViewById(R.id.btn1);
    btn2 = (Button)findViewById(R.id.btn2);
    btn3 = (Button)findViewById(R.id.btn3);
    btn4 = (Button)findViewById(R.id.btn4);
 
          }
}
然后就要实现这个接口的方法Onclick(View v)
public void onClick(View v) {
    switch (v.getId()){
        case R.id.btn1:
            Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
            break;
        case R.id.btn2:
            Toast.makeText(MainActivity.this,"this is btn2",Toast.LENGTH_SHORT).show();
            break;
        case R.id.btn3:
            Toast.makeText(MainActivity.this,"this is btn3",Toast.LENGTH_SHORT).show();
            break;
        case R.id.btn4:
            Toast.makeText(MainActivity.this,"this is btn4",Toast.LENGTH_SHORT).show();
            break;
    }
}


写完这个方法之后然后在onCreate方法中以此给每个添加监听器:
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);
btn4.setOnClickListener(this);


完整的代码是这样的
public class MainActivity extends Activity implements View.OnClickListener{
    private Button btn1,btn2,btn4,btn3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
        btn3 = (Button)findViewById(R.id.btn3);
        btn4 = (Button)findViewById(R.id.btn4);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn2:
                Toast.makeText(MainActivity.this,"this is btn2",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn3:
                Toast.makeText(MainActivity.this,"this is btn3",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn4:
                Toast.makeText(MainActivity.this,"this is btn4",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}


或者也可以自己定义一个内部类(注意哦!!!这里最好是内部类哦,不然你想使用activity的某些资源还是会很麻烦的)来实现OnClick这个接口:
public class ClickListener implements View.OnClickListener{

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn1:
                Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn2:
                Toast.makeText(MainActivity.this,"this is btn2",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn3:
                Toast.makeText(MainActivity.this,"this is btn3",Toast.LENGTH_SHORT).show();
                break;
            case R.id.btn4:
                Toast.makeText(MainActivity.this,"this is btn4",Toast.LENGTH_SHORT).show();
                break;
        }
    }
}


 
然后再onCreate中实例化一个ClickListener,给每个控件设置监听
ClickListener listener = new ClickListener();
btn1.setOnClickListener(listener);
btn2.setOnClickListener(listener);
btn3.setOnClickListener(listener);
btn4.setOnClickListener(listener);


完整的代码如下:
public class MainActivity extends Activity{
    private Button btn1,btn2,btn4,btn3;
    private ClickListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = (Button)findViewById(R.id.btn1);
        btn2 = (Button)findViewById(R.id.btn2);
        btn3 = (Button)findViewById(R.id.btn3);
        btn4 = (Button)findViewById(R.id.btn4);
        listener = new ClickListener();
        btn1.setOnClickListener(listener);
        btn2.setOnClickListener(listener);
        btn3.setOnClickListener(listener);
        btn4.setOnClickListener(listener);
    }
    public class ClickListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn1:
                    Toast.makeText(MainActivity.this,"this is btn1",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn2:
                    Toast.makeText(MainActivity.this,"this is btn2",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn3:
                    Toast.makeText(MainActivity.this,"this is btn3",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn4:
                    Toast.makeText(MainActivity.this,"this is btn4",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }
    }


那么这就是给控件=设置监听事件的几种方法,如果你还有第四种或者第五种方法欢迎和小交流哦!!

 

 

 

Ps:本文中若某些语言说的不够准确的话,请各位看官不吝赐教!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值