android项目实战-背呗单词DEV02-创建计划实现

该篇说明

该篇我们来详解创建计划功能实现。

创建计划功能是在创建计划界面中的。

也就是在CreatePlanActivity中

在后台模块中只描述管理层,其它的数据库操作等请自行查看

效果如图

执行流程图

创建计划UI界面功能说明

1> 横幅显示创建计划字符

hfTitleTextView = (TextView) findViewById(R.id.hfTitleTextView);

hfTitleTextView.setText("创建计划");

2> 创建计划项的填写

a步骤> 单词书名输入操作,只需要显示组件和获取组件即可

private void init() {

    studyNameEditText = (EditText) findViewById(R.id.studyNameEditText);

}

  

b步骤1> 初始化选择单词书相关属性及值

private void init() {  selectWordBookRelativeLayout =

              (RelativeLayout) findViewById(R.id.selectWordBookRelativeLayout);

       wordBooknameTextView = (TextView) findViewById(R.id.wordBooknameTextView);

       wordBookname = WordBookConstant.WDBK_CATE_ARRAY[0];

       wordBooknameTextView.setText(wordBookname);}

  

b步骤2> 选择单词书布局点击监听

private void logic() {

        selectWordBookRelativeLayout.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View view) {

                alertSelectWorkBook();

            }

        });

}

b步骤3> 弹出的单选框选择单词书

private void alertSelectWorkBook () {
       new AlertDialog.Builder(context) 

       .setTitle("请选择书籍") 

       .setIcon(android.R.drawable.ic_dialog_info)                 

       .setSingleChoiceItems(WordBookConstant.WDBK_CATE_ARRAY, wordBookSelectedIndex,  

         new DialogInterface.OnClickListener() { 

            public void onClick(DialogInterface dialog, int which) { 

               dialog.dismiss();
               wordBookname = WordBookConstant.WDBK_CATE_ARRAY[which];
               wordBookSelectedIndex = which;

               wordBooknameTextView.setText(wordBookname);
               Toast.makeText(context, "单词书是:" + wordBookname, Toast.LENGTH_LONG).show();

            }
         }
       ) 

       .setNegativeButton("取消", null)
       .show();
}

  

c步骤1> 初始选择每天单元量布局组件及值

private void init() {
    selectDayUnitRelativeLayout =

              (RelativeLayout) findViewById(R.id.selectDayUnitRelativeLayout);

       dayUnitTextView = (TextView) findViewById(R.id.dayUnitTextView);

       dayUnitStr = ReciteConstant.DUNITCT_ITEMS_ARRAY[0];

       dayUnitTextView.setText(dayUnitStr);
}

c步骤2> 选择每天单词量布局点击监听

private void logic() {
    selectDayUnitRelativeLayout.setOnClickListener(new OnClickListener() {

            @Override

            public void onClick(View view) {

                alertSelectDayUnit();

            }

    });
}

c步骤3> 弹出的单选框选择每天单元量

private void alertSelectDayUnit() {
        new AlertDialog.Builder(context)
        .setTitle("请选择每天单元量")
        .setIcon(android.R.drawable.ic_dialog_info)
        .setSingleChoiceItems(ReciteConstant.DUNITCT_ITEMS_ARRAY, dayUnitSelectedIndex,
          new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss(); 

                dayUnitStr = ReciteConstant.DUNITCT_ITEMS_ARRAY[which];
                dayUnitSelectedIndex = which;
                dayUnitTextView.setText(dayUnitStr);
                Toast.makeText(context, "每天单元量:" + dayUnitStr, Toast.LENGTH_LONG).show();
             }
          }
        )
        .setNegativeButton("取消", null)
        .show();
}

3> 创建学习计划确定按钮监听

private void logic() {
    confirmButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                if(validate()) {
                    createStudyPlan();
                }
            }
        });
}

  

4> 效验信息

在创建前需要进效验信息,也就是输入和选择项的信息的

这些信息将作为计划的一些属性

private boolean validate() {
        studyPlaname = studyNameEditText.getText().toString().trim();

        if(studyPlaname == null || "".equals(studyPlaname)) {
            Toast.makeText(context, "学习名必须填写", Toast.LENGTH_LONG).show();
            return false;
        }
        return true;
}

5> 创建学习计划方法

因为是耗时操作,所以也需要在多线程完成

private void createStudyPlan() {
        createStudyPlanProgressDialog.setMessage("正在创建计划数据");
        createStudyPlanProgressDialog.show();

        Thread createStudyPlanThread =
            new Thread(new CreateStudyPlanThread());
        createStudyPlanThread.start();
}

6> 创建学习计划线程

除了创建计划以外,还需要初始单词表数据,也就是将sdcard对应的单词书数据复制到了学习计划中

class CreateStudyPlanThread implements Runnable {
       public void run() {
           //创建计划
           new StudyPlanManager().create(

                studyPlaname, wordBookname, Integer.parseInt(dayUnitStr));

           //初始单词表数据
           new WordManager().initData(studyPlaname, wordBookname);
           SystemUtil.sleepvd(2000);
           myHandler.sendEmptyMessage(0);

       }
}

  

创建计划功能后台模块讲解

创建计划功能调用了两个管理模块

一个是计划管理模块StudyPlanManager

一个单词管理模块WordManager

1> 计划管理的模块创建功能

也就是创建计划功能

public void create(String studyPlaname, String wordBookname, int dayUnit) {
        if(studyPlanDao == null) {
            studyPlanDao = new StudyPlanDao();

        }

        //---------
        // 创建学习计划对象
        StudyPlan studyPlan = new StudyPlan();
        studyPlan.name = studyPlaname;
        studyPlan.wordBookname = wordBookname;
        studyPlan.allWordCount = WordBookConstant.getWordCountFromWordBook(wordBookname);
        studyPlan.dayUnitCount = dayUnit;

        //总单元量(除不尽+1,最后一个单元少于70)
        studyPlan.allUnitCount =
                    studyPlan.allWordCount % ReciteConstant.DUNITG_WORD_COUNT == 0 ?
                    studyPlan.allWordCount / ReciteConstant.DUNITG_WORD_COUNT :
                    studyPlan.allWordCount / ReciteConstant.DUNITG_WORD_COUNT    + 1;

        //所有新单元耗时天数,不算复习(除不尽+1, 最后一天少于70个单词)
        studyPlan.needDayCount =
                    studyPlan.allWordCount % (dayUnit * ReciteConstant.DUNITG_WORD_COUNT) == 0 ?
                    studyPlan.allWordCount / (dayUnit * ReciteConstant.DUNITG_WORD_COUNT) :
                    studyPlan.allWordCount / (dayUnit * ReciteConstant.DUNITG_WORD_COUNT) + 1;
        studyPlan.createDated = DateUtil.getDateString(DateUtil.FORMATE_DAY);

        //一些计划中背诵的属性
        studyPlan.lastTodayTaskState = ReciteConstant.TODAYTASK_STUDY;

               Global.defaultReciteTimes = Integer.parseInt(ReciteConstant.RECTIMES_ITEMS_ARRAY[0]);

        studyPlan.lastReciteProgressStr = 0 + "/" + Global.defaultReciteTimes;
        studyPlan.lastUnitGroupIndex = 0;
        //---------

        //---------
        //添加数据
        String spPathStr = PathConstant.STUPLAN_PATH + "sp_" + studyPlaname;

        // 创建学习计划文件
        createStudyPlanFile(spPathStr);

        //添加数据到学习计划数据库中
        studyPlanDao.add(studyPlan, spPathStr);
        //---------

}

 

2> 单词管理的的初始单词表数据

就是将sdcard对应的单词书数据复制到了学习计划中

调用了单词书的数据库操作以及单词的数据库操作,这里数据库操作都是本地的sqlite3

public void initData(String studyPlaname, String wordBookname) {
        if(wordDao == null) {

            wordDao = new WordDao();

        }

        if(wordBookDao == null) {

            wordBookDao = new WordBookDao();

        }

        List<String> wordStrList = wordBookDao.findWordBook(wordBookname);

        String pathStr = PathConstant.STUPLAN_PATH + "sp_" +  studyPlaname;

        wordDao.initAddMoreUseTransaction(wordStrList, pathStr);}

  

更多请自行下载源码解读

应用下载:请点击

源码下载:请点击

时间: 2024-08-10 00:05:15

android项目实战-背呗单词DEV02-创建计划实现的相关文章

android项目实战-背呗单词00-文章目录

一.准备篇android项目实战-背呗单词00-文章目录android项目实战-背呗单词01-软件说明android项目实战-背呗单词02-项目概述android项目实战-背呗单词03-项目图表android项目实战-背呗单词04-项目数据库说明 二.重要技术实现说明android项目实战-背呗单词DEV00-程序环境构架搭建android项目实战-背呗单词DEV01-拷贝单词书实现android项目实战-背呗单词DEV02-创建计划实现android项目实战-背呗单词DEV03-创建任务实现a

android项目实战-背呗单词DEV07-单词测试实现

该篇说明 该篇我们进行单词测试实现讲解 也就是单词测试界面WordExamActivity中功能 布局也需要在xml中实现 但是也需要有单词测试视图类来设置一些值具体查看对照源码 在该界面中,测试完后会更新数据 效果如图 流程图 单词测试界面功能流程详解 1> 显示单词测试信息 a> 首先要加载单词测试数据 需要调用单词测试管理模块加载数据功能 private void loadWordExamData() { loadingExamDataProgressBar = (ProgressBar

android项目实战-背呗单词02-项目概述

本篇说明: 项目概述主要包括 1> 项目开发说明 2> 功能需求说明 3> app原型图 4> 效果演示图 项目开发说明: 1> 在学习android过程中,看到别人的一些词典开发文章但是不完整所以就有了该项目的启动了 2> 在开发过程中,加强了项目文档的经验,最后使用了迭代思维 3> 该项目经过多次UI改进,所以耗时比较长,因为也是业余开发,并整理了UI和Utils两套简单的android组件库 功能需求说明: 这里功能需求按照产品需求及软件模块描述 1>

android项目实战-背呗单词DEV01-拷贝单词书实现

该篇说明 现在我们正式进入功能及代码的分析 主要进行重要功能的讲解吧. 拷贝单词书功能在第一个界面中 也就是在欢迎界面WelcomeActivity中 项目整体构架是MVC模式的 UI中主要只进行调用显示数据 真正的数据处理逻辑在客户端后台. 那么先介绍UI及流程,再描述后台的拷贝单词书功能. 效果如图 执行流程图 流程详细说明 1> 先需要检查单词书 首先需要检查SDcard中是否存在单词书文件,不存在才需要进行拷贝 private void checkWordBookFiles() { bo

android项目实战-背呗单词DEV00-程序环境构架搭建

要开发项目当然要首先进行环境的搭建 我们这里使用的是eclipse+ADT 下载开发环境所需软件 1> JDK1.7 下载地址:百度云点我 官网地址:请点击我 2> Eclipse4.4 luna 下载地址:百度云点我 官网地址:请点击我 3> Android SDK Manager 24.0.2 下载地址:百度云点我 (特别说明:我的百度云已经包含了4.0.3和2.1的SDK) 官网地址:请点击我直接下载 4> ADT 24.0.2 下载地址:百度云点我 官网地址:请点击我直接下

android项目实战-背呗单词DEV06-单词背诵实现

该篇说明 该篇我们进行单词背诵实现讲解 单词背诵功能主要在单词详解界面中WordDetActivity > 在单词列表界面中点击按钮就可进入单词详解界面进行一个单元组范围单词的学习 > 在单词详解界面中只进行单元组范围单词学习记录, 待测试完后才算学习一次. 否则不记录到数据库 效果如图 流程图 单词详解界面功能流程详解 1> 显示单词详细信息 这里用到了WordDetView.getViev(Activity, WordDet)方法 界面组成大部分是由代码实现了,单词详解视图界面会详解

android项目实战-背呗单词DEV05-主界面自定义menu

该篇说明 该篇我们进行主界面自定义底部菜单使用的讲解 主界面也就是当天任务界面FragmentActivity 自定义menu的功能需要导入V1UILibrary即可 源码地址:https://github.com/vomzoo/VOMAndroidUILib 在主界面只是调用自定义menu,具体实现暂请看V1UILibrary源码 效果如图 流程图 主要UI功能 1> 重写onCreateOptionsMenu并添加一项 /** * 自定义menu,必须创建一项 */ @Override pu

android项目实战-背呗单词03-项目图表

本篇说明: 包括相关图和相关表 相关图 1> 总体流程图 2> 软件功能图 3> 软件模块图 4> 软件构架图 相关表 1> 功能需求表 2> 功能需求与管理模块的关系表 3> 包结构表 图相关 1> 总体流程图 2> 软件功能图 3> 软件模块图 4> 软件构架图 表相关 有待更新

Android项目实战(八):列表右侧边栏拼音展示效果

原文:Android项目实战(八):列表右侧边栏拼音展示效果 之前忙着做项目,好久之前的技术都没有时间总结,而发现自己的博客好多写的技术都比自己掌握的时候晚了很多.不管怎么样,写技术博客一定是一个想成为优秀程序猿或者已经是优秀程序猿必须做的.好吧,下面进行学习阶段. 记得很久之前就使用过侧边拼音栏了,先看下它的效果,一个列表,列表的右侧有一个拼音列表,当列表发生滑动的时候,拼音列表也随着滑动,而规律就是拼音列表滑动的位置为显示列表的当前位置的文字的首字母决定,当然,直接点击拼音列表的一个位置,显