【Android studio】学号及姓名的输入保存页面

news2024/11/15 11:20:08

一、设计需求

设计一个页面有两个编辑框,分别输入学号和姓名。有两个按钮,一个是修改按钮,当按下修改按钮,编辑框可以进行编辑;一个是保存按钮,当按下保存按钮,使编辑框显示当前的内容并且编辑框不可编辑,此外,在关闭app之后再次打开app,编辑框内容是按下保存按钮之后的内容。

二、程序文件

布局文件activity_main.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"
    android:padding="16dp"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/nameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="姓名"
        android:enabled="false" />

    <EditText
        android:id="@+id/idEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="学号"
        android:enabled="false" />

    <Button
        android:id="@+id/modifyButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改" />

    <Button
        android:id="@+id/saveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="保存" />

</LinearLayout>

对应的MainActivity.java文件代码如下:

package com.example.myapplication;

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private EditText idEditText; // 学号编辑框
    private EditText nameEditText; // 姓名编辑框
    private Button modifyButton; // 修改按钮
    private Button saveButton; // 保存按钮

    private String currentId; // 当前学号
    private String currentName; // 当前姓名
    private boolean isEditable = false; // 编辑框是否可编辑的标志

    private SharedPreferences sharedPreferences; // SharedPreferences对象,用于存储数据

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化视图组件
        idEditText = findViewById(R.id.idEditText);
        nameEditText = findViewById(R.id.nameEditText);
        modifyButton = findViewById(R.id.modifyButton);
        saveButton = findViewById(R.id.saveButton);

        // 获取SharedPreferences实例
        sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);

        // 修改按钮的点击监听器
        modifyButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isEditable = true;
                idEditText.setEnabled(true);
                nameEditText.setEnabled(true);
            }
        });

        // 保存按钮的点击监听器
        saveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                isEditable = false;
                currentId = idEditText.getText().toString();
                currentName = nameEditText.getText().toString();
                idEditText.setEnabled(false);
                nameEditText.setEnabled(false);

                // 保存编辑框的内容到SharedPreferences
                SharedPreferences.Editor editor = sharedPreferences.edit();
                editor.putString("id", currentId);
                editor.putString("name", currentName);
                editor.apply();
            }
        });
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (!isEditable) {
            idEditText.setEnabled(false);
            nameEditText.setEnabled(false);

            // 从SharedPreferences加载编辑框的内容
            currentId = sharedPreferences.getString("id", "");
            currentName = sharedPreferences.getString("name", "");
            idEditText.setText(currentId);
            nameEditText.setText(currentName);
        }
    }
}

代码逻辑如下:

  • onCreate() 方法:在应用程序启动时调用,用于初始化界面组件和设置按钮的点击监听器。
  • modifyButton 点击监听器:当点击修改按钮时,将使编辑框变为可编辑状态。
  • saveButton 点击监听器:当点击保存按钮时,将获取编辑框中的学号和姓名,并将其保存到 SharedPreferences 中。
  • onResume() 方法:在应用程序恢复活动状态时调用,用于从 SharedPreferences 中加载保存的学号和姓名,并设置到编辑框中。

三、SharedPreferences介绍

SharedPreferences 是 Android 提供的一种轻量级的存储机制,用于在应用程序中存储和检索简单的键值对数据。它是基于键值对的文件存储系统,以 XML 格式保存数据,并将其存储在应用程序的私有目录中。

常见的操作步骤如下:

  • 获取 SharedPreferences 实例:通过调用 getSharedPreferences() 方法或 getPreferences() 方法获取 SharedPreferences 实例。getSharedPreferences() 方法用于获取具有自定义名称的 SharedPreferences 实例,而 getPreferences() 方法获取默认名称的 SharedPreferences 实例。
SharedPreferences sharedPreferences = getSharedPreferences("MyPrefs", MODE_PRIVATE);
  • 编辑 SharedPreferences:通过调用 SharedPreferences 实例的 edit() 方法获取 SharedPreferences.Editor 实例,从而可以开始编辑 SharedPreferences 文件。然后,可以使用 SharedPreferences.Editor 实例的方法来添加、修改或删除数据。
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("key", "value"); // 添加或修改数据
editor.remove("key"); // 删除数据
  • 提交编辑:在完成对 SharedPreferences 文件的修改后,必须调用 SharedPreferences.Editor 实例的 apply() 方法或 commit() 方法来提交编辑,以确保修改生效。
editor.apply(); // 异步提交修改
editor.commit(); // 同步提交修改
  • 读取数据:通过 SharedPreferences 实例的 getXXX() 方法(例如 getString()、getInt()、getBoolean() 等)读取已保存的数据。
String value = sharedPreferences.getString("key", defaultValue); // 读取字符串数据,可设置默认值

四、结果展示

点击修改按钮,可以对姓名和学号编辑框进行编辑。当点击保存按钮,可以对信息进行保存,同时锁死编辑框,使编辑框无法编辑,直到再次点击修改按钮。

当APP退出重开时,会显示上次保存的结果。

在这里插入图片描述

未来可期

文章到这里就要结束了,但故事还没有结局

如果本文对你有帮助,记得点个赞👍哟,也是对作者最大的鼓励🙇‍♂️。

如有不足之处可以在评论区👇多多指正,我会在看到的第一时间进行修正

作者:爱打瞌睡的CV君
CSDN:https://blog.csdn.net/qq_44921056
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在线性能分析工具Arthas基于Springboot安装配置使用和Arthas Tunnel安装配置使用

概要 Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&#xff0c;监测方法执行耗时&#xff0c;类加…

Python Web开发入门教程(非常详细)

Python是一种非常流行的编程语言&#xff0c;被广泛应用于数据科学、Web开发、人工智能、机器学习等领域。Python语言易学易用&#xff0c;是许多初学者进入编程世界的入门选择。然而&#xff0c;学习Python并不是一件简单的事情&#xff0c;尤其是对于初学者而言。在本文中&am…

深度学习——优化器Optimizer

代码以及详细注释&#xff1a; import torch import torch.utils.data as Data import torch.nn.functional as F import matplotlib.pyplot as plt# torch.manual_seed(1) # reproducible """超参数 """ # 学习率 LR 0.01 # 批大小 BATCH_…

API测试之Postman使用完全指南

前言 Postman是一个可扩展的API开发和测试协同平台工具&#xff0c;可以快速集成到CI/CD管道中。旨在简化测试和开发中的API工作流。 Postman 工具有 Chrome 扩展和独立客户端&#xff0c;推荐安装独立客户端。 Postman 有个 workspace 的概念&#xff0c;workspace 分 pers…

16、Python读取气象数据的正确姿势

文章目录 一、气象数据格式&#xff08;常用&#xff09;二、单个文件读取1. 常规格式2. CSV格式3. NetCDF格式4. GRIB格式 一、气象数据格式&#xff08;常用&#xff09; 常规格式&#xff08;Plain Text&#xff09;&#xff1a;气象数据可以使用纯文本格式进行存储&#xf…

漏洞复现 || 某友文件上传

免责声明 技术文章仅供参考&#xff0c;任何个人和组织使用网络应当遵守宪法法律&#xff0c;遵守公共秩序&#xff0c;尊重社会公德&#xff0c;不得利用网络从事危害国家安全、荣誉和利益&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此…

HarmonyOS学习路之开发篇—流转(跨端迁移 一)

跨端迁移开发 场景介绍 开发者在应用FA中通过调用流转任务管理服务、分布式任务调度的接口&#xff0c;实现跨端迁移。 1. 设备A上的应用FA向流转任务管理服务注册一个流转回调&#xff1a; Alt1-系统推荐流转&#xff1a;系统感知周边有可用设备后&#xff0c;主动为用户提…

网络版本的计算器

文章目录 1. TCP协议通讯流程2. 应用层2.1 再谈 "协议" 3. 网络版计算器3.1 服务器提供服务3.1.1 提取有效载荷3.1.2 服务器的反序列化3.1.3 计算服务3.1.4 服务器的序列化3.1.5 添加序列化后的长度 3.2 客户端发送请求3.2.1 填充客户端请求3.2.2 客户端进行序列化3.…

为什么我挖不倒sql注入啊!

为什么我挖不倒sql注入啊&#xff01; 背景一句话讲原理小白速挖注入 背景 不知道是不是初学安全的小伙伴都和我一样&#xff0c;刚开始学的时候&#xff0c;诶挺简单啊&#xff01;我咋这么聪明一学就会&#xff0c;靶场轻轻松松过关&#xff0c;到了实战根本挖不出来&#x…

【C++】float / double 与 0 值比较

【C】float / double 与 0 值比较 文章目录 【C】float / double 与 0 值比较1. 概述不同1.1 - float 与 double 实际存储1.2 - C 语言与 C 中不同 2. 比较方法2.1 - C 风格比较2.2 - 使用 limits 函数 3. 参考链接 References 1. 概述不同 当然使用普通的比较没有问题&#xf…

项目管理中,WBS与项目计划有什么区别?

为了成功完成项目并控制成本&#xff0c;我们有必要采取科学的项目管理方法。实现这一目标的工具是项目计划和工作分解结构&#xff08;WBS&#xff09;。 WBS 与项目计划是项目管理中必不可少的工具&#xff0c;但两者有不同的用途。WBS精确描述了项目工作和可交付成果&#…

前端vue入门(纯代码)26_多级路由

如果耐不住寂寞&#xff0c;你就看不到繁华。 【24.Vue Router--多级路由】 [可以去官网看看Vue Router文档](嵌套路由 | Vue Router (vuejs.org)) 在实际开发中&#xff0c;我们不单单会使用到一层路由&#xff0c;有时候会涉及到两层或两层以上的路由&#xff0c;多级路由…

带清除按钮的输入框

// index.html <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1"><title>测试 - layui</title><link rel&…

Gof23设计模式之桥接模式

1.概述 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;它将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。它的核心思想就是将一个大类或一系列紧密关联的类拆分成两个独立的抽象和实现部分&#xff0c;以便能够更加灵活地扩展…

html相关面试题

html相关面试题 1.html和css中的图片加载与渲染规则是什么样的&#xff1f;2.title与h1的区别、b与strong的区别、i与em的区别&#xff1f;title 和 h1 的区别b 和 strong 的区别i 和 em 的区别最后 3.script 标签为什么建议放在 body 标签的底部&#xff08;defer、async&…

Duplicate keys detected: ‘0‘. This may cause an update error.

问题 vue报错 Duplicate keys detected: ‘0‘. This may cause an update error. 原因 <div v-for“(item,id) in items” :key"id”>{{item.name}} </div><div v-for“(item,id) in items” :key"id”>{{item.address}} </div>:key重…

G1垃圾收集器

一、内存结构 G1将堆内存划分成2048个相同大小的内存Region&#xff0c;一般Region大小等于堆内存大小除以2048&#xff0c;比如堆内存有4个G&#xff0c;每个Region大小为2M&#xff08;-XX:G1HeapRegionSize参数可以设置Region大小&#xff0c;一般不推荐修改&#xff09; G…

C. Strong Password

Problem - C - Codeforces 思路&#xff1a;根据题意我们能够知道就是对于每一位都要再区间范围内&#xff0c;并且不是s的子序列&#xff0c;我们先看第一位&#xff0c;第一位有l[1]-r[1]这几种选择&#xff0c;假如说某一种选择在s中没有那么我们就选择以这个开头的作为答案…

一文讲透进销存管理,和4款值得推荐的进销存管理软件!

进销存管理已经成为当下很多企业和商户必须面对的问题&#xff0c;想要在激烈的市场竞争中取胜&#xff0c;告别混乱管理&#xff0c;必须要有完善合理的进销存管理方法。 那么&#xff0c;进销存管理具体指的是什么&#xff0c;如何做好进销存管理&#xff0c;以及市面上有哪些…

L1-033 出生年(c语言)

作者 陈越 单位 浙江大学 以上是新浪微博中一奇葩贴&#xff1a;“我出生于1988年&#xff0c;直到25岁才遇到4个数字都不相同的年份。”也就是说&#xff0c;直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求&#xff0c;自动填充“我出生于y年&#xff0c;直到…