• Android代码规范----按钮单击事件的四种写法


    来自:http://www.cnblogs.com/smyhvae/p/4375710.html

    【前言】

    按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。

    按钮多的时候一般选择第四种写法。

    一、第一种写法:在XML文件中声明onClick属性(很少用)

    在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。

    (1)xml文件代码如下:

    复制代码
     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:orientation="vertical" >
     6 
     7     <Button
     8         android:id="@+id/btn1"
     9         android:layout_width="wrap_content"
    10         android:layout_height="wrap_content"
    11         android:onClick="onClick"
    12         android:text="按钮1" />
    13 
    14     <Button
    15         android:id="@+id/btn2"
    16         android:layout_width="wrap_content"
    17         android:layout_height="wrap_content"
    18         android:onClick="onClick"
    19         android:text="按钮2" />
    20 
    21 </LinearLayout>
    复制代码

    上面的代码中,我们在第11行、18行指定了onClick属性,然后接下来在Activity中写一个onClick同名方法。

    (2)MainActivity.java:

    复制代码
     1 package com.vae01;
     2 
     3 import android.app.Activity;
     4 import android.content.DialogInterface.OnClickListener;
     5 import android.os.Bundle;
     6 import android.view.View;
     7 import android.widget.Button;
     8 import android.widget.ImageView;
     9 import android.widget.TextView;
    10 import android.widget.Toast;
    11 
    12 public class MainActivity extends Activity {
    13 
    14     private Button btn1, btn2;
    15 
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.activity_main);
    20         initView();
    21     }
    22 
    23     // 方法:初始化View
    24     private void initView() {
    25         btn1 = (Button) findViewById(R.id.btn1);
    26         btn2 = (Button) findViewById(R.id.btn2);
    27     }
    28 
    29     //方法:控件View的点击事件
    30     public void onClick(View v) {
    31         switch (v.getId()) {
    32         case R.id.btn1:
    33             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
    34             break;
    35         case R.id.btn2:
    36             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
    37             break;        
    38             
    39         default:
    40             break;
    41         }
    42     }
    43 }
    复制代码

    注意,第30行的onClick()方法的权限是public,毕竟xml文件还要访问的嘛。

    二、第二种写法:使用内部类(很少用)

    (1)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"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮1" />
    
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮2" />
    
    </LinearLayout>
    复制代码

    (2)MainActivity.java:

    复制代码
     1 package com.vae01;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.view.View.OnClickListener;
     7 import android.widget.Button;
     8 import android.widget.ImageView;
     9 import android.widget.TextView;
    10 import android.widget.Toast;
    11 
    12 public class MainActivity extends Activity {
    13 
    14     private Button btn1, btn2;
    15 
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.activity_main);
    20         initView();
    21     }
    22 
    23     // 方法:初始化View
    24     private void initView() {
    25         btn1 = (Button) findViewById(R.id.btn1);
    26         btn2 = (Button) findViewById(R.id.btn2);
    27         
    28         btn1.setOnClickListener(new MyClickListener());
    29         btn2.setOnClickListener(new MyClickListener());
    30     }
    31 
    32     class MyClickListener implements OnClickListener {
    33         @Override
    34         public void onClick(View v) {
    35             switch (v.getId()) {
    36             case R.id.btn1:
    37                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
    38                 break;
    39             case R.id.btn2:
    40                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
    41                 break;
    42             default:
    43                 break;
    44             }
    45         }
    46     }
    47 } 
    复制代码

    注意第28、29行:不要忘记了绑定监听器。

    三、第三种写法:匿名内部类(适合场景:测试、或者只有单个button的时候。使用较多

    (1)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"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮1" />
    
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮2" />
    
    </LinearLayout>
    复制代码

    (2)MainActivity.java:

    复制代码
     1 package com.vae01;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.view.View.OnClickListener;
     7 import android.widget.Button;
     8 import android.widget.Toast;
     9 
    10 public class MainActivity extends Activity {
    11 
    12     private Button btn1, btn2;
    13 
    14     @Override
    15     protected void onCreate(Bundle savedInstanceState) {
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_main);
    18         initView();
    19     }
    20 
    21     // 方法:初始化View
    22     private void initView() {
    23         btn1 = (Button) findViewById(R.id.btn1);
    24         btn2 = (Button) findViewById(R.id.btn2);
    25         
    26         btn1.setOnClickListener(new OnClickListener(){
    27             @Override
    28             public void onClick(View v) {
    29                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
    30             }
    31             
    32         });
    33         
    34         btn2.setOnClickListener(new OnClickListener(){
    35             @Override
    36             public void onClick(View v) {
    37                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
    38             }
    39             
    40         });
    41     }
    42 }
    复制代码

    四、第四种写法:Activity实现View.OnClickListener接口(最常用)

    Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理

    (1)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"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btn1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮1" />
    
        <Button
            android:id="@+id/btn2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="按钮2" />
    
    </LinearLayout>
    复制代码

    (2)MainActivity.java:

    复制代码
     1 package com.vae01;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.view.View.OnClickListener;
     7 import android.widget.Button;
     8 import android.widget.Toast;
     9 
    10 public class MainActivity extends Activity implements OnClickListener{
    11 
    12     private Button btn1, btn2;
    13 
    14     @Override
    15     protected void onCreate(Bundle savedInstanceState) {
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_main);
    18         //初始化View
    19         initView();
    20     }
    21 
    22     // 方法:初始化View
    23     private void initView() {
    24         btn1 = (Button) findViewById(R.id.btn1);
    25         btn2 = (Button) findViewById(R.id.btn2);    
    26         
    27         //按钮绑定点击事件的监听器
    28          btn1.setOnClickListener(this);
    29          btn2.setOnClickListener(this);
    30     }
    31 
    32     //方法:按钮的单击事件
    33     @Override
    34     public void onClick(View v) {
    35         switch (v.getId()) {
    36         case R.id.btn1:
    37             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
    38             break;
    39         case R.id.btn2:
    40             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
    41             break;
    42         default:
    43             break;
    44         }            
    45     }
    46 }
    复制代码
  • 相关阅读:
    学派:儒学
    学派:儒家
    佛教-文章:释迦牟尼佛最有灵性的4句话
    阿里云-OSS-Help-安全白皮书:白皮书
    佛教-揭语:诸法因缘生,我说是因缘;因缘尽故灭,我作如是说;诸法从缘起,如来说是因;彼法因缘尽,是大沙门说。
    深度学习系列之ANN
    IDEA无法启动:Failed to create JVM:error code -4
    Windows8-x64 VMWare安装Linux CentOS6-x64
    [数位dp] bzoj 3209 花神的数论题
    UVALive 6084 Happy Camper(数学题)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/7284562.html
Copyright © 2020-2023  润新知