Android——Click事件实现方式

火影  金牌会员 | 2025-3-17 17:08:29 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 977|帖子 977|积分 2931

Android观察者模式(Observer Design Pattern):在对象之间界说⼀个⼀对多的依赖,当⼀个对象状态改变     的时候,所有依赖的对象都会得到通知并⾃动更新。说⼈话:也叫发布订阅模式,可以或许很好的解耦一个对象改变,⾃动改变另⼀个对象这种情况。     ①、Subject 被观察者     界说被观察者必须实现的职责, 它必须可以或许动态地增长、 取消观察者。 它⼀般是抽象类或者是实现     类, 仅仅完成作为被观察者必须实现的职责: 管理观察者并通知观察者。     ②、Observer观察者     观察者吸收到消息后, 即进⾏update(更新⽅法) 操纵, 对吸收到的信息进⾏处置处罚。     ③、ConcreteSubject具体的被观察者     界说被观察者⾃⼰的业务逻辑, 同时界说对哪些事件进⾏通知。     ④、ConcreteObserver具体的观察者     每个观察在吸收到消息后的处置处罚反应是差别, 各个观察者有自己的处置处罚逻辑。     一、匿名类
  MainActivity代码:
  1. package com.example.click;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.Toast;
  6. import androidx.activity.EdgeToEdge;
  7. import androidx.appcompat.app.AppCompatActivity;
  8. public class MainActivity extends AppCompatActivity{
  9.     private Button button1,button2,button3,button4,button5,button6,button7,button8;
  10.     @Override
  11.     protected void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         EdgeToEdge.enable(this);
  14.         setContentView(R.layout.activity_main);
  15.         button1=findViewById(R.id.button1);
  16.         button1.setOnClickListener(new View.OnClickListener() {
  17.             @Override
  18.             public void onClick(View view) {
  19.                 Toast.makeText(MainActivity.this,"匿名函数",Toast.LENGTH_SHORT).show();
  20.             }
  21.        });
  22. }
  23. }
复制代码
以上代码(用于 Android 开辟)做了以下几件事:
  

  • 界说 MainActivity 类继承自 AppCompatActivity,声明白 8 个按钮变量。
  • 在 onCreate 方法中,先调用父类 onCreate 完成初始化,接着启用可能与屏幕边沿显示相干的功能,然后设置界面结构。
  • 从结构里找到 id 为 button1 的按钮,给它添加点击事件监听器,点击该按钮时会弹出显示 “匿名函数” 的 Toast 提示框。
  运行效果图如下:
  点击button1可看见匿名函数
  

  二、内部类
  MainActivity代码:
  1. package com.example.click;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.Toast;
  6. import androidx.activity.EdgeToEdge;
  7. import androidx.appcompat.app.AppCompatActivity;
  8. public class MainActivity extends AppCompatActivity {
  9.     private Button button1, button2, button3, button4, button5, button6, button7, button8;
  10.     @Override
  11.     protected void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         EdgeToEdge.enable(this);
  14.         setContentView(R.layout.activity_main);
  15.         button2 = findViewById(R.id.button2);
  16.         button3 = findViewById(R.id.button3);
  17.         button4 = findViewById(R.id.button4);
  18.         button2.setOnClickListener(new MyClickListener());
  19.         button3.setOnClickListener(new MyClickListener());
  20.         button4.setOnClickListener(new MyClickListener());
  21. }
  22. private class MyClickListener implements View.OnClickListener {
  23.        @Override
  24.        public void onClick(View view) {
  25.             if (view.getId() == R.id.button2) {
  26.                 Toast.makeText(MainActivity.this, "内部类1", Toast.LENGTH_SHORT).show();
  27.             } else if (view.getId() == R.id.button3) {
  28.                 Toast.makeText(MainActivity.this, "内部类2", Toast.LENGTH_SHORT).show();
  29.             } else {
  30.                 Toast.makeText(MainActivity.this, "内部类3", Toast.LENGTH_SHORT).show();
  31.               }
  32.          }
  33.     }
  34. }
复制代码
以上代码(用于 Android 开辟)做了以下几件事:
  

  • 界说 MainActivity 类继承 AppCompatActivity,声明白 8 个按钮变量。
  • 在 onCreate 方法中,先执行父类 onCreate 初始化,启用屏幕边沿相干功能,设置界面结构,然后获取 id 为 button2、button3、button4 的按钮。
  • 为这三个按钮设置点击事件监听器,使用自界说的内部类 MyClickListener 实现。点击 button2 弹出显示 “内部类 1” 的 Toast 提示,点击 button3 弹出 “内部类 2” 的 Toast 提示,点击 button4 弹出 “内部类 3” 的 Toast 提示。
  运行效果图如下:
  分别点击 button2, button3, button4,即可看到内部类1,内部类2,内部类3
  

  三、继承接口
  MainActivity代码:
  1. package com.example.click;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.widget.Button;
  5. import android.widget.Toast;
  6. import androidx.activity.EdgeToEdge;
  7. import androidx.appcompat.app.AppCompatActivity;
  8. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
  9.     private Button button1,button2,button3,button4,button5,button6,button7,button8;
  10.     @Override
  11.     protected void onCreate(Bundle savedInstanceState) {
  12.         super.onCreate(savedInstanceState);
  13.         EdgeToEdge.enable(this);
  14.         setContentView(R.layout.activity_main);
  15.         button5=findViewById(R.id.button5);
  16.         button6=findViewById(R.id.button6);
  17.         button7=findViewById(R.id.button7);
  18.         button5.setOnClickListener(this);
  19.         button6.setOnClickListener(this);
  20.         button7.setOnClickListener(this);
  21. }
  22. @Override
  23. public void onClick(View view) {
  24.      if(view.getId()==R.id.button5){
  25.            Toast.makeText(MainActivity.this,"继承接口1",Toast.LENGTH_SHORT).show();
  26.          }
  27.      else if(view.getId()==R.id.button6){
  28.            Toast.makeText(MainActivity.this,"继承接口2",Toast.LENGTH_SHORT).show();
  29.          }
  30.      else{
  31.            Toast.makeText(MainActivity.this,"继承接口3",Toast.LENGTH_SHORT).show();
  32.          }
  33.  }
  34. }
复制代码
以上代码(用于 Android 开辟)做了以下几件事:
  

  • 类的界说与继承、接口实现
    界说了 MainActivity 类,该类继承自 AppCompatActivity,同时实现了 View.OnClickListener 接口,意味着这个类既要具备 AppCompatActivity 的相干特性与功能,又要按照接口规范去处置处罚视图点击事件。
  • onCreate 方法内的操纵

    • 初始化相干
      调用 super.onCreate(savedInstanceState),完成父类 AppCompatActivity 的初始化工作,转达 savedInstanceState 参数用于可能的状态恢复;接着通过 EdgeToEdge.enable(this) 启用可能与屏幕边沿显示适配相干的功能(具体取决于 EdgeToEdge 类的实现);再使用 setContentView(R.layout.activity_main) 设置当前 Activity 的界面结构,即加载对应的 XML 结构文件所描述的界面元素到该 Activity 上展示。
    • 按钮获取与点击事件设置
      通过 findViewById 方法分别获取 id 为 button5、button6、button7 的按钮,并为它们设置点击事件监听器,都设置为当前类实例(因为实现了 View.OnClickListener 接口),也就是当这些按钮被点击时会触发当前类中重写的 onClick 方法来处置处罚点击逻辑。

  • onClick 方法的逻辑
    在重写的 onClick 方法中,通过判断点击的视图(按钮)的 id 来区分具体是哪个按钮被点击:

    • 若点击的视图 id 为 R.id.button5,则通过 Toast.makeText 弹出一个显示内容为 “继承接口 1” 的短暂提示信息(Toast),用于向用户展示相干提示内容。
    • 若点击的视图 id 为 R.id.button6,则弹出显示 “继承接口 2” 的 Toast 提示信息。
    • 若点击的视图 id 不是前面两者(即 button7 或其他符合此处判断逻辑的按钮),则弹出显示 “继承接口 3” 的 Toast 提示信息。

  运行效果图如下:
  分别点击 button5,button6,button7,即可看到继承接口1,继承接口2,继承接口3
  

  四、设置⽂件设置click⽅法
  MainActivity代码:
  1.     public void click(View View){
  2.         Toast.makeText(MainActivity.this,"Click",Toast.LENGTH_SHORT).show();
  3.         }
复制代码
运行效果图如下:
  点击button8可看见Click
  

  总结构activity_main.xml代码:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:tools="http://schemas.android.com/tools"
  4.     android:id="@+id/main"
  5.     android:layout_width="match_parent"
  6.     android:layout_height="match_parent"
  7.     android:orientation="vertical"
  8.     tools:context=".MainActivity">
  9.     <Button
  10.         android:id="@+id/button1"
  11.         android:layout_width="wrap_content"
  12.         android:layout_height="wrap_content"
  13.         android:text="Button1" />
  14.     <LinearLayout
  15.     android:layout_width="match_parent"
  16.     android:layout_height="wrap_content">
  17.     <Button
  18.         android:id="@+id/button2"
  19.         android:layout_width="wrap_content"
  20.         android:layout_height="wrap_content"
  21.         android:text="Button2" />
  22.     <Button
  23.         android:id="@+id/button3"
  24.         android:layout_width="wrap_content"
  25.         android:layout_height="wrap_content"
  26.         android:text="Button3" />
  27.     <Button
  28.         android:id="@+id/button4"
  29.         android:layout_width="wrap_content"
  30.         android:layout_height="wrap_content"
  31.         android:text="Button4" />
  32. </LinearLayout>
  33.     <LinearLayout
  34.         android:layout_width="match_parent"
  35.         android:layout_height="wrap_content">
  36.     <Button
  37.         android:id="@+id/button5"
  38.         android:layout_width="wrap_content"
  39.         android:layout_height="wrap_content"
  40.         android:text="Button5" />
  41.     <Button
  42.         android:id="@+id/button6"
  43.         android:layout_width="wrap_content"
  44.         android:layout_height="wrap_content"
  45.         android:text="Button6" />
  46.     <Button
  47.         android:id="@+id/button7"
  48.         android:layout_width="wrap_content"
  49.         android:layout_height="wrap_content"
  50.         android:text="Button7" />
  51.     </LinearLayout>
  52.     <Button
  53.         android:id="@+id/button8"
  54.         android:layout_width="wrap_content"
  55.         android:layout_height="wrap_content"
  56.         android:text="Button8"
  57.         android:onClick="click"/>
  58. </LinearLayout>
复制代码
   

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表