当前位置: 首页 > article >正文

网络资源模板--Android Studio 实现背单词App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--基于Android studio 实现的背单词App

二、项目测试环境

三、项目详情

所有项目页面展示:

启动页

  1. 欢迎动画:在 onCreate 方法中,创建了一个透明度动画,使得欢迎图片逐渐显示,动画持续 5000 毫秒。

  2. 动画监听:实现了 Animation.AnimationListener 接口,监听动画的开始和结束。在动画开始时,设置欢迎页面的背景资源;在动画结束时,调用 skip() 方法进行跳转。

  3. 跳转逻辑:在 skip() 方法中,首先调用 initday() 初始化日期信息。根据用户是否是第一次运行来决定跳转到主活动 MainActivity 还是选择书籍活动 Selectbook

  4. 首次运行检查:在 initday() 方法中,通过 SharedPreferences 检查用户的首次运行状态。如果是第一次运行,设置标志并跳转到选择书籍活动;如果不是,获取用户的天数和数据库名称。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:id="@+id/welcome_img"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>

首页

  1. Intent 键名一致性:确保在不同活动中使用相同的键名。
  2. 空指针检查:增加对可能为 null 的对象的检查。
  3. 简化按钮点击监听:提高代码的可读性和维护性。
  4. 适时更新 UI:在合适的时机更新用户界面。
  5. 资源释放:注意内存管理,及时释放不再使用的资源。
public class MainActivity extends Activity {
    public static int daywords = 10; // 每天的单词数量
    public static int fence; // 用于存储“围栏”值

    public static void actionStart(Context context, int f) {
        Intent intent = new Intent(context, ReviewLetterMain.class); // 创建意图,跳转到ReviewLetterMain活动
        intent.putExtra("Fence", f); // 将围栏值传递给下一个活动
        context.startActivity(intent); // 启动活动
        Log.v("hh", "main_action" + fence); // 打印日志
    }

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); // 设置布局

        fence = getIntent().getIntExtra("newFence", 0); // 获取传入的围栏值

        ((Button) findViewById(R.id.button)).setOnClickListener(v -> {
            MainActivity.actionStart(MainActivity.this, MainActivity.fence); // 点击按钮时启动ReviewLetterMain活动
        });

        ((Button) findViewById(R.id.memwords)).setOnClickListener(v -> {
            MainActivity.this.startActivity(new Intent(MainActivity.this, MemorizeWords.class)); // 跳转到MemorizeWords活动
        });

        ((Button) findViewById(R.id.books)).setOnClickListener(v -> {
            MainActivity.this.startActivity(new Intent(MainActivity.this, Selectbook.class)); // 跳转到Selectbook活动
        });
    }

    public void initdayview() {
        TextView tvbooks = (TextView) findViewById(R.id.tvbook); // 获取书籍文本视图
        ((TextView) findViewById(R.id.day)).setText("" + ((int) Math.ceil((double) (DatabaseUtil.getnumgroupbyvis(0) / daywords)))); // 显示当天的单词数
        ((TextView) findViewById(R.id.words)).setText("" + daywords); // 显示每日单词目标

        if (DBManager.DB_NAME == Selectbook.cetbook[0]) {
            tvbooks.setText("四级词汇"); // 如果当前数据库是四级词汇,则显示相应文本
        } else {
            tvbooks.setText("六级词汇"); // 否则显示六级词汇
        }
    }

    protected void onStart() {
        super.onStart();
        new DBManager(this).openDatabase(); // 打开数据库连接
        initdayview(); // 初始化显示信息

        if (!NetworkUtil.isNetworkAvailable(this)) {
            NetworkUtil.showSetNetworkUI(this); // 如果网络不可用,显示网络设置界面
        } else {
            Toast.makeText(this, "网络可用...", Toast.LENGTH_SHORT).show(); // 网络可用时显示提示
        }
    }
}

背单词页面

  1. 单词学习:该类用于帮助用户学习和记忆单词,通过展示单词及其中文提示,用户可以标记已知或不熟悉的单词。

  2. UI 更新:根据用户的选择,动态更新界面,显示当前单词及其状态。

  3. 状态管理:通过管理单词的访问状态,跟踪用户对单词的熟悉程度。

  4. 数据持久化:与数据库交互,将用户的学习状态保存,以便下次使用。

  5. 统计功能:实时更新已知单词数量和新单词数量,为用户提供学习进度的反馈。

  6. 生命周期管理:在合适的时机保存和恢复用户的学习状态,确保数据不丢失。

    private void Updatenowword() {
        Calendar calendar = Calendar.getInstance();
        String str = calendar.get(1) + "" + (calendar.get(2) + 1) + "" + calendar.get(5);
        this.timekey = str; // 获取当前日期作为键
        SharedPreferences sharedPreferences = getSharedPreferences(str, 0);

        if (sharedPreferences.getInt(shkonwwordkey, 0) != 0) {
            int i = sharedPreferences.getInt(shkonwwordkey, 0);
            this.knownum = i; // 更新已知单词数量
            this.newwordnum = i; // 更新新单词数量
        } else {
            this.knownum = 0; // 初始化已知单词数量
            this.newwordnum = 0; // 初始化新单词数量
        }

        this.tvokword.setText("" + this.knownum); // 显示已知单词数量
        this.tvnewword.setText("" + this.newwordnum); // 显示新单词数量

        if (this.knownum >= MainActivity.daywords) {
            ShowExtendWordsDialog(); // 如果已知单词数量达到目标,显示提示
        }

        this.al = DatabaseUtil.GetWord(0, totalnum - this.knownum); // 获取剩余单词
        this.todayleftwordnum = totalnum - this.knownum;
    }

四、完整的项目源码 

👇👇👇👇👇快捷获取方式👇👇👇👇👇


http://www.kler.cn/news/360343.html

相关文章:

  • 计算机毕业设计 基于Python的社交音乐分享平台的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • 【网络安全】IDOR与JWT令牌破解相结合,实现编辑、查看和删除数万帐户
  • 每天5分钟玩转C#/.NET之了解C#中的顶级语句
  • Go语言依赖注入方式
  • 高效容器化技术(2)---docker的安装
  • 实用好助手
  • 【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (一):项目简介及安装依赖
  • SpringBoot和Vue的图片上传的解决方案
  • Java爬虫API:获取商品详情数据的利器
  • 基于SpringBoot+Vue+uniapp微信小程序的教学质量评价系统的详细设计和实现
  • 构建可扩展、安全和智能的数字化解决方案:微服务架构与物联网的深度融合
  • gitlab项目转移群组
  • 汇编实现逆序复制数据
  • 物联网防爆气象站的工作原理
  • C07.L10.STL之队列
  • 【推导过程】常用离散分布的数学期望、方差、特征函数
  • 物流行业创新:SpringBoot技术应用
  • 明日周刊-第23期
  • AI赋能大尺度空间模拟与不确定性分析及数字制图
  • docker compose部署mongodb 分片集群