2025.3.28(周五)

news/2025/3/27 6:57:57/文章来源:https://www.cnblogs.com/Sunyiran/p/18788735

android实验二第三部分

事情处理

1. 点击事件 (OnClickListener)

方法:setOnClickListener(View.OnClickListener listener)

android:onClick(在 XML 中使用)

核心功能:处理按钮、文本、图片等控件的 单击事件

使用场景:按钮提交、页面跳转、功能触发等。

2. 长按事件 (OnLongClickListener)

方法:setOnLongClickListener(View.OnLongClickListener listener)

核心功能:处理控件的 长按事件,通常用于显示菜单或触发特殊功能。

使用场景:删除列表项、弹出上下文菜单、触发隐藏功能等。

3. 触摸事件 (OnTouchListener)

方法:setOnTouchListener(View.OnTouchListener listener)

核心功能:监听控件的 触摸操作(按下、抬起、移动),提供更精细的交互控制。

使用场景:自定义手势、拖动控件、滑动事件等。

4. 手势事件 (GestureDetector)

方法:GestureDetector.SimpleOnGestureListener

onFling()、onDoubleTap()、onScroll() 等

核心功能:检测更复杂的 手势事件,如滑动、双击、长按等。

使用场景:滑动页面、双击放大、快速滑动触发刷新等。

5. 按键事件 (onKeyDown() 和 onKeyUp())

方法:onKeyDown(int keyCode, KeyEvent event)

onKeyUp(int keyCode, KeyEvent event)

核心功能:监听 物理按键(返回键、音量键、菜单键等)的按下与抬起事件。

使用场景:拦截返回键、音量键调整、截获硬件按键操作等。

6. 上下文菜单 (onCreateContextMenu() 和 onContextItemSelected())

方法:onCreateContextMenu()

onContextItemSelected(MenuItem item)

核心功能:处理 长按弹出菜单 的创建和点击事件。

使用场景:长按列表项弹出菜单、删除或编辑项、分享等功能。

7. 复用 OnClickListener 处理多个控件

方法:setOnClickListener(this) + switch(v.getId())

核心功能:使用一个 OnClickListener 实现 多个按钮或控件的点击事件

使用场景:多按钮点击处理、界面中不同控件触发不同功能。

8. 列表项点击事件 (OnItemClickListener)

方法:setOnItemClickListener(AdapterView.OnItemClickListener listener)

核心功能:监听 ListView、GridView 项目的 单击事件

使用场景:列表项跳转、点击加载详情、触发操作等。

9. RecyclerView 项点击事件

方法:在 Adapter 的 onBindViewHolder() 中添加点击事件。

核心功能:监听 RecyclerView 的 列表项点击事件

使用场景:列表项详情跳转、打开对话框、加载子页面等。

10. ScrollView 滚动事件

方法:setOnScrollChangeListener(View.OnScrollChangeListener listener)

核心功能:监听 ScrollView 的 滚动事件

使用场景:触底加载、滚动到顶部、动态显示/隐藏控件等。

11. SeekBar 进度改变事件

方法:setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener listener)

核心功能:监听 SeekBar 的 进度变化事件

使用场景:音量调节、视频进度控制、亮度调节等。

12. Switch/Toggle 事件

方法:setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)

核心功能:监听 Switch、ToggleButton 的 状态切换事件

使用场景:开关控制、模式切换、功能启用/禁用等。

13. RadioGroup 单选事件

方法:setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener listener)

核心功能:监听 RadioGroup 的 选中项变化事件

使用场景:选择模式、切换选项、触发不同功能等。

14. TextView 文本变化事件

方法:addTextChangedListener(TextWatcher watcher)

核心功能:监听 EditText 输入框的 文本变化事件

使用场景:实时搜索、输入校验、动态提示等。

15. Spinner 选择项事件

方法:setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener)

核心功能:监听 Spinner 下拉菜单的 选项选择事件

使用场景:选择筛选条件、切换数据、改变界面状态等。

16. CheckBox/CompoundButton 事件

方法:setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)

核心功能:监听 CheckBox 的 选中与取消事件

使用场景:多选操作、启用/禁用功能、批量选择等。

以下示例为点击按钮跳转:点击activity_process_query.xml中的“继续报工”按钮,会通过后端onClick()方法跳转到activity_process_entry.xml

activity_process_query.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp"
    android:background="#f5f5f5">

    <!-- 标题 -->
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="上一道工序内容"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_marginBottom="16dp"
        android:gravity="center" />

    <!-- 工序名称 -->
    <TextView
        android:id="@+id/tv_process_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="工序:射蜡"
        android:textSize="18sp"
        android:textStyle="bold"
        android:layout_marginBottom="16dp" />

    <!-- 模具数量 -->
    <TextView
        android:id="@+id/tv_mold_quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="模具数量:25"
        android:textSize="16sp"
        android:layout_marginBottom="8dp" />

    <!-- 任务数量 -->
    <TextView
        android:id="@+id/tv_task_quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="任务数量:25"
        android:textSize="16sp"
        android:layout_marginBottom="8dp" />

    <!-- 实际完成数量 -->
    <TextView
        android:id="@+id/tv_actual_quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="实际完成数量:23"
        android:textSize="16sp"
        android:layout_marginBottom="8dp" />

    <!-- 废品数量 -->
    <TextView
        android:id="@+id/tv_scrap_quantity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="废品数量:2"
        android:textSize="16sp"
        android:layout_marginBottom="16dp" />

    <!-- 按钮容器 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_marginTop="16dp"
        android:gravity="center">

        <!-- 继续报工按钮 -->
        <Button
            android:id="@+id/btn_continue_report"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="继续报工"
            android:backgroundTint="#5CACEE"
            android:textColor="@android:color/white"
            android:layout_marginEnd="8dp"
            android:textSize="16sp" />

        <!-- 完成按钮 -->
        <Button
            android:id="@+id/btn_complete"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="完成"
            android:backgroundTint="#5CACEE"
            android:textColor="@android:color/white"
            android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>

 

ProcessQueryActivity.java

 

package com.example.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

public class ProcessQueryActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_process_query); // 设置布局文件

        // 获取报工按钮
        Button btnSubmitReport = findViewById(R.id.btn_continue_report);

        // 设置报工按钮点击事件
        btnSubmitReport.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 点击报工按钮后跳转到 ProcessEntryActivity
                Intent intent = new Intent(ProcessQueryActivity.this, ProcessEntryActivity.class);
                startActivity(intent); // 启动 ProcessEntryActivity
            }
        });
    }
}

 

activity_process_entry.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <!-- 工序选择 -->
        <Spinner
            android:id="@+id/sp_process_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp" />

        <!-- 模具数量 -->
        <EditText
            android:id="@+id/et_mold_quantity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="模具数量"
            android:inputType="number" />

        <!-- 任务数量 -->
        <EditText
            android:id="@+id/et_task_quantity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="任务数量"
            android:inputType="number" />

        <!-- 实际完成数量 -->
        <EditText
            android:id="@+id/et_actual_quantity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="实际完成数量"
            android:inputType="number" />

        <!-- 废品数量 -->
        <EditText
            android:id="@+id/et_scrap_quantity"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="废品数量"
            android:inputType="number" />

        <!-- 提交按钮 -->
        <Button
            android:id="@+id/btn_submit"
            android:backgroundTint="#5CACEE"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="提交"
            android:layout_marginTop="16dp" />
    </LinearLayout>
</ScrollView>

以下是效果图;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904664.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于原生小程序canvas标签始终显示再最上层问题

官方说明: https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html 解决方法:将canvas正常绘制 对canvas进行定位,远离手机屏幕显示区域 将canvas转换为img图片,将转换后的图片进行展示 如果图片清晰度不够,则将canvas成倍的绘制,将转换后的…

Particle Asset OTA 如何实现远程

问题 用粒子平台部署更新到你的舰队是很容易的。但是,当您的产品包含其他组件(如ML模型、显示器、协处理器、证书或图像和声音等媒体)时,远程管理更新就变得更具挑战性。传统的方法通常需要物理访问,这可能耗时、昂贵,而且在规模上不切实际。解决方案 粒子资产OTA使您能够轻…

【企业必读】内外网文件传输的6个常见误区,你中招了吗?

在数字化转型的浪潮中,企业内外网文件传输已成为日常运营中不可或缺的一环。然而,许多企业在进行网络隔离后的文件传输和产品选型时,常常陷入一些常见的误区。这些误区不仅可能影响工作效率,还可能带来严重的安全隐患和合规风险。本文将深入探讨这些误区,并提供实用的建议…

SpreadJS V18.0 新版本发布!数据驱动革新,效率与体验全面升级

表格控件SpreadJS推出V18.0及V8.0版本!本次更新聚焦数据管理、多语言适配、报表与透视表增强,新增多项重磅功能,赋能企业高效应对复杂业务场景。核心亮点速览👇 一、表格绑定数据源:直连数据管理器,性能与效率双突破 开发背景 企业常将 Excel 作为动态数据库使用(如分析…

使用LattePanda V1制作了一个简单的基于batocera的游戏仿真站

现在,我们正在使用我们最近开发的Batocera arcade Box使用PS1模拟器运行Roadrash。我们使用的是Batocera Linux,这是一个开源且完全免费的复古游戏发行版本,旨在将任何计算机或单板计算机变成游戏控制台。 在这里,我们在相当旧的Latte Panda V1单板计算机上启动了Batocera,…

河北省科级政策app 连接MySQL数据库

项目结构 在连接数据库的时候要把localhost改为自己电脑的IP地址 开放mysql数据库远程访问的权限 使用jdbc的方法把jar包导入项目中

【Guava工具类】StringsInts

String相关工具 Strings Guava 提供了一系列用于字符串处理的工具: 对字符串为null或空的处理nullToEmpty(@Nullable String string):如果非空,则返回给定的字符串;否则返回空字符串 public static String nullToEmpty(@Nullable String string) {//如果string为null则返回…

我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报

大家好,我开发的【巨大娘的玩耍♥】游戏正在众筹中,参与即可获得限量优惠回报 游戏目前正在爱发电上众筹,众筹总额达成5千元即可开发和发布正式版。众筹截止日期:2025年7月23日 支持者可获得 8折激活码、获得所有玩家可见的特殊成就、上感谢名单 等 限量 回报~ 点我查看具体…

用于遥控车的先进PCB

该定制板集成了大功率电机控制,无线通信和高效电源管理在RC汽车的世界里,精确控制和效率是至关重要的。为了推动性能的极限,我专门为RC汽车设计了一个先进的PCB。这种定制板集成了大功率电机控制,无线通信和高效的电源管理,使其成为爱好者和机器人爱好者的理想选择。 为了…

读DAMA数据管理知识体系指南29文件和内容管理活动

读DAMA数据管理知识体系指南29文件和内容管理活动1. 规划生命周期的管理 1.1. 从文件的创建或接收文件后的分发、存储、检索、归档和潜在的销毁 1.2. 规划包括开发分类/索引系统和分类法,以实现文件的存储和检索 1.3. 重要的是,生命周期规划中需要为档案建立具体的制度 1.4. …

c语言实验2

1 #include <stdio.h>2 #include <stdlib.h>3 #include <time.h>4 5 #define N 56 7 int main() {8 int number;9 int i; 10 11 srand(time(0)); // 以当前系统时间作为随机种子 12 for(i = 0; i < N; ++i) { 13 number = r…

使用 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化全攻略

使用 Browser-Use WebUI + DeepSeek 实现浏览器AI自动化全攻略 环境准备 1. 安装 Python 环境版本要求:Python 3.11 或更高版本 验证安装:命令行执行 python --version 注意:安装时需勾选 "Add to PATH" 选项(Windows用户)2. 核心工具安装 # 安装 browser-use 框…