按钮单击事件的四种写法(转)

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

【前言】

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

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

 

一、第一种写法:在XML文件中指定(很少用)

在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 }

### 回答1: 在VS Code中添加按钮可以通过扩展来实现。实现按钮单击事件的步骤如下: 1. 在扩展的`package.json`文件中定义一个命令,例如: ``` "commands": [ { "command": "myExtension.myCommand", "title": "My Command" } ] ``` 2. 在扩展的`extension.ts`文件中注册命令并实现单击事件,例如: ``` let disposable = vscode.commands.registerCommand('myExtension.myCommand', () => { // 执行单击事件的代码 }); context.subscriptions.push(disposable); ``` 在上述代码中,`vscode.commands.registerCommand`方法用于注册命令,`context.subscriptions.push`方法用于将命令的生命周期与扩展的生命周期绑定在一起。 3. 在扩展的`package.json`文件中定义一个按钮,例如: ``` "contributes": { "menus": { "editor/title": [ { "command": "myExtension.myCommand", "title": "My Button", "when": "editorTextFocus" } ] } } ``` 在上述代码中,`contributes.menus`属性用于定义菜单,`editor/title`用于添加到编辑器标题栏,`when`属性用于指定按钮出现的条件。 4. 在扩展的`extension.ts`文件中添加对菜单的监听,例如: ``` let disposable = vscode.commands.registerCommand('myExtension.myCommand', () => { // 执行单击事件的代码 }); context.subscriptions.push(disposable); let disposable2 = vscode.workspace.onDidChangeConfiguration(() => { vscode.commands.executeCommand('setContext', 'editorTextFocus', vscode.window.activeTextEditor !== undefined); }); context.subscriptions.push(disposable2); ``` 在上述代码中,`vscode.workspace.onDidChangeConfiguration`方法用于监听配置文件的更改,`vscode.commands.executeCommand`方法用于执行命令。最后,将监听的生命周期与扩展的生命周期绑定在一起。 以上是实现VS Code按钮单击事件的基本步骤,具体实现还需要根据具体需求进行调整。 ### 回答2: 在VSCode中,按钮单击事件是指当用户单击某个按钮时触发的操作。VSCode是一款强大的文本编辑器,可以通过扩展插件来扩展其功能。在插件开发中,我们可以通过编代码来添加按钮,并为按钮添加单击事件。 要添加按钮单击事件,首先我们需要在插件的扩展文件中定义一个命令,命令的作用是触发按钮单击时要执行的操作。在命令中,我们可以编任意的JavaScript代码,来实现我们想要的功能。例如,我们可以在按钮单击事件中执行一段代码来修改文本的样式、插入特定的代码段、执行代码格式化等操作。 在扩展文件中定义好命令后,我们需要在扩展的视图中创建一个按钮,并将按钮与刚才定义的命令关联起来。接下来,当用户单击按钮时,按钮单击事件就会被触发,并执行对应的命令。 需要注意的是,VSCode提供了丰富的API,可以让我们更方便地操作编辑器的各种功能。比如,我们可以通过API获取当前打开的编辑器的文本内容,执行代码片段,获取选中的文本等等。因此,在按钮单击事件中,我们可以调用这些API来实现更丰富的功能。 总之,VSCode的按钮单击事件是通过在扩展中定义命令,然后将按钮与命令关联起来的方式来实现的。这样,当用户单击按钮时,我们就可以触发对应的操作,对文本进行修改、插入代码等等。这种机制使得VSCode的扩展插件具有了更强大的扩展能力,能够满足不同开发者的需求。 ### 回答3: VSCode(Visual Studio Code)是一款功能强大、轻量级的代码编辑器。它支持多种编程语言,除了基本的编辑功能外,还提供了丰富的插件扩展和定制选项。 在VSCode中,按钮单击事件是指通过按钮点击来执行特定的操作或功能,以提高开发效率。按钮可以添加在工具栏、侧边栏或编辑器顶部等位置。 实现按钮单击事件的一种方式是通过扩展插件。首先,我们需要在插件的 manifest 文件中定义一个自定义按钮,设置其图标、命令和标题等属性。然后,我们可以在插件代码中编方法或函数,该函数将在按钮点击时触发。 在方法或函数中,我们可以编自定义的逻辑,如执行命令、修改代码、执行网络请求等。例如,我们可以创建一个按钮,点击时触发代码格式化操作,或者点击时执行自动保存文件的功能。 按钮单击事件的实现也可以通过使用VSCode的命令面板。每个命令都有一个唯一的标识符,我们可以在插件代码中通过标识符来触发相应的命令,从而实现按钮单击事件。 总结来说,VSCode提供了丰富的扩展和定制选项,使得我们可以通过添加按钮来定制化编辑器,为我们的工作流程增加便捷。按钮单击事件更进一步扩展了VSCode的功能,使得开发者可以自定义相关操作,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值