码迷,mamicode.com
首页 > 移动开发 > 详细

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

时间:2016-04-29 14:33:07      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

该篇说明

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

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

也就是在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);
}

  

更多请自行下载源码解读

应用下载:请点击

源码下载:请点击

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

标签:

原文地址:http://www.cnblogs.com/vomzoo/p/5445758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!