我的Android案例签到日历
2015年的Android案例之旅
案例八:签到日历
知识点:
GridView的使用SQLite的使用
涉及文件:
res->layout->activity_main.xml 主布局文件res->layout->date.xml 布局文件src->db->DBHelper.java java文件src->db->SignDAO.java java文件src->activity->MainActivity.java java文件
activity_main.xml
01.<!-- 线性布局 -->03.android:layout_height="match_parent"04.android:layout_width="match_parent"05.android:orientation="vertical">06.<!-- 文本控件07.显示当前月份 -->08.<TextView09.android:id="@+id/show"10.android:gravity="center"11.android:layout_width="match_parent"12.android:layout_height="wrap_content"13.android:text="月份"/>14.<!-- 网格视图15.-->16.<GridView17.android:id="@+id/myDate"18.android:layout_width="match_parent"19.android:layout_height="355dp"20.android:numColumns="7"></GridView>21.<Button22.android:id="@+id/sign"23.android:layout_width="match_parent"24.android:layout_height="wrap_content"25.android:text="签到"/>26.</LinearLayout>date.xml
02.android:layout_width="match_parent"03.android:layout_height="match_parent"04.android:orientation="vertical">05. 06.<TextView07.android:id="@+id/txtWeekDateMB"08.android:layout_width="wrap_content"09.android:layout_height="wrap_content"10.android:layout_marginLeft="10dp"11.android:layout_marginTop="10dp"12.android:visibility="gone" />13. 14.<TextView15.android:id="@+id/txtDayDateMB"16.android:layout_width="wrap_content"17.android:layout_height="wrap_content"18.android:layout_marginLeft="10dp"19.android:layout_marginTop="10dp" />20.</LinearLayout>MainActivity.java
001.public class MainActivity extends Activity {002.//Log标签003.private static final String TAG = "SIGN";004.//声明对象005.private Button sign;006.private TextView show;007.private GridView myDate;008.//获取本地时间009.Time nowTime = new Time();010.//一个月内的天数011.private int dayMaxNum;012.private int year,month,day,ym;013.private SignDAO sdao;014.//查询结果015.private List<String> list = new ArrayList<String>();016.private ArrayList<HashMap<String, Object>> sinalist,alisttmp;017.@SuppressLint("NewApi")018.@Override019.protected void onCreate(Bundle savedInstanceState) {020.super.onCreate(savedInstanceState);021.setContentView(R.layout.activity_main);022.Log.i(TAG, "SIGN is onCreate");023. 024.//初始化对象025.init();026.//初始化数据库信息027.initdata();028. 029.myDate.setOnItemClickListener(new OnItemClickListener(){030. 031.@Override032.public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,033.long arg3) {034.//判断是否已经签到 从服务器获取签到信息035.//模拟从本地数据库获取信息036.if(day==arg2+1)//只能当天签到037.{038.sinalist = sdao.findSinInfo("zhangsan",year+"-"+month+"-"+(arg2+1),"0");039.if(sinalist.size()>0)040.{041.Toast.makeText(getApplicationContext(), "已经签过到不能重复签到", 200).show();042.Log.d("", "已签到");043.}044.else045.{046.//在数据库插入一条数据047.sdao.insertSinInfo("zhangsan", "张三", year+"-"+month+"-"+(arg2+1),year+""+month);048.initdata();049.}050.}051. 052.}053.});054.}055. 056./**057.* @param 初始化对象058.*/059.private void init(){060.sign = (Button)this.findViewById(R.id.sign);061.show = (TextView)this.findViewById(R.id.show);062.myDate = (GridView)this.findViewById(R.id.myDate);063.//取本地时间(时间应该从服务器获取)064.nowTime.setToNow();065.year = nowTime.year;066.month = nowTime.month+1;067.day = nowTime.monthDay;068.show.setText(year+"-"+month+"-"+day);069.}070. 071./**072.* @param 初始化数据库信息073.*/074.private void initdata(){075.sdao = new SignDAO(MainActivity.this);076.sdao.open();077.sinalist = sdao.findSinInfo("zhangsan","",year+""+month);//查询当月已签到的日期078.list.clear();079.dayMaxNum = getCurrentMonthDay();080.for(int i=0;i<dayMaxNum;i++)081.{082.list.add(i, i+1+"");083.}084.myDate.setSelector(new ColorDrawable(Color.TRANSPARENT));085.myDate.setAdapter(new getDayNumAdapter(getApplicationContext()));086.}087. 088.class getDayNumAdapter extends BaseAdapter{089. 090.Context c;091.public getDayNumAdapter(Context c)092.{093.this.c = c;094.}095. 096.@Override097.public int getCount() {098.return list.size();099.}100. 101.@Override102.public Object getItem(int position) {103.return list.get(position);104.}105. 106.@Override107.public long getItemId(int arg0) {108.return 0;109.}110. 111.@Override112.public View getView(int position, View convertView, ViewGroup parent) {113.View v = LinearLayout.inflate(c, R.layout.date, null);114.TextView txtWeek = (TextView)v.findViewById(R.id.txtWeekDateMB);115.TextView txtDay = (TextView)v.findViewById(R.id.txtDayDateMB);116.switch (position)117.{118.case 0:119.txtWeek.setText("一");120.break;121.case 1:122.txtWeek.setText("二");123.break;124.case 2:125.txtWeek.setText("三");126.break;127.case 3:128.txtWeek.setText("四");129.break;130.case 4:131.txtWeek.setText("五");132.break;133.case 5:134.txtWeek.setText("六");135.break;136.case 6:137.txtWeek.setText("日");138.break;139.}140.if(position<7)141.{142.txtWeek.setVisibility(View.VISIBLE);143.}144.int lstDay = Integer.parseInt(list.get(position));145.//标记当前日期146.if(day==lstDay)147.{148.txtDay.setText(list.get(position).toString());149.txtDay.setTextColor(Color.RED);150.}else151.txtDay.setText(list.get(position).toString());152.//标记已签到后的背景153.for(int i=0;i<sinalist.size();i++)154.{155.String nowdate = sinalist.get(i).get("sindate").toString();156.String[] nowdatearr = nowdate.split("-");157.if(lstDay==Integer.parseInt(nowdatearr[2])){158.txtDay.setBackgroundColor(Color.BLUE);159.++ym;160.}161.sign.setText("已经签到天数:"+ym);162.}163.return v;164.}165. 166.}167. 168. 169.//获取当月的 天数170.public int getCurrentMonthDay() { 171.Calendar a = Calendar.getInstance(); 172.a.set(Calendar.DATE, 1); 173.a.roll(Calendar.DATE, -1); 174.int maxDate = a.get(Calendar.DATE); 175.return maxDate; 176.}177. 178. 179. 180. 181.}DBHelper.java
01.public class DBHelper extends SQLiteOpenHelper {02. 03.public DBHelper(Context context) {04.super(context, "sign.db", null, 1);05.}06. 07./**08.* @param 创建表09.*/10.@Override11.public void onCreate(SQLiteDatabase db) {12.String sql="create table sinTB(" +13."sin_id integer primary key autoincrement," +14."userid varchar(20)," +15."usernmae varchar(20)," +16."sindate varchar(20)," +17."yearmonth varchar(20)," +18."nowdate integer" +19.")";20.db.execSQL(sql);21.}22. 23./**24.* @param 数据库版本更新时,会调用此方法25.*/26.@Override27.public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {28. 29.}30. 31.}SignDAO.java
01.public class SignDAO {02.//声明对象03.Context context;04.SQLiteDatabase db;05.DBHelper dbHelper;06. 07.public SignDAO(Context context){08.this.context = context;09.}10. 11./**12.* @param 打开数据库连接13.*/14.public boolean open(){15.dbHelper = new DBHelper(context);16.db = dbHelper.getWritableDatabase();17.if(db == null){18.return false;19.}20.return true;21.}22. 23./**24.* @param 关闭连接25.*/26.public void close(){27.dbHelper.close();28.}29. 30./**31.* @param 插入信息32.* @param uid33.* @param name34.* @param date35.* @param ym36.*/37.public void insertSinInfo(String uid,String name,String date,String month){38.String sql="insert into sinTB(userid,usernmae,sindate,yearmonth,nowdate) values(?,?,?,?,?)";39.db.execSQL(sql,new Object[]{uid,name,date,month,System.currentTimeMillis()});40.}41. 42./**43.* @param 查询信息44.* @param uid45.* @param date46.* @param ym47.* @return48.*/49.public ArrayList<HashMap<String, Object>> findSinInfo(String uid,String date,String month){50.ArrayList<HashMap<String,Object>> alist = new ArrayList<HashMap<String,Object>>();51.alist.clear();52.HashMap<String, Object> rowMap;53.String sql;54.try{55.if("0".equals(month))56.{57.sql="select * from sinTB where userid='"+uid+"' and sindate='"+date+"'";58.}59.else60.{61.sql="select * from sinTB where userid='"+uid+"' and yearmonth='"+month+"'";62.}63.Cursor cur = db.rawQuery(sql, null);64.cur.moveToFirst();65.while(cur.moveToNext()){66.rowMap = new HashMap<String, Object>();67.rowMap.put("sin_id", cur.getInt(cur.getColumnIndex("sin_id")));68.rowMap.put("userid", cur.getString(cur.getColumnIndex("userid")));69.rowMap.put("usernmae", cur.getString(cur.getColumnIndex("usernmae")));70.rowMap.put("sindate", cur.getString(cur.getColumnIndex("sindate")));71.long aa = cur.getLong(cur.getColumnIndex("nowdate"));72.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");73.Date now = new Date(aa);74.String date1 = format.format(now);75.rowMap.put("nowdate", date1);76.Log.e("", cur.getString(cur.getColumnIndex("sindate")));77.alist.add(rowMap);78.}79.return alist;80.}catch(Exception e){81.return alist;82.}83. 84.}85.}结伴旅游,一个免费的交友网站:www.jieberu.com
推推族,免费得门票,游景区:www.tuituizu.com
我的Android案例签到日历的更多相关文章
- Android 向系统日历中添加事件
查了一天半,总算有点大概了.以下是自己的理解,有错误的地方望指正. android系统有日历功能,应用程序可以根据一些接口开发自己的功能,即使是日历app也是根据这些接口开发的,所以我们可以利用程序向 ...
- Android开发之日历控件实现
Android开发之日历控件实现:以下都是转载的. 日历控件 日历控件 日历控件 日历控件
- 调用Android自带日历功能(日历列表单、添加一个日历事件)
调用Android自带日历功能 觉得这篇文章不错,转载过来. 转载:http://blog.csdn.net/djy1992/article/details/9948393 Android手机配备有 ...
- Android自定义控件之日历控件
标签: android 控件 日历 应用 需求 2015年09月26日 22:21:54 25062人阅读 评论(109) 收藏 举报 分类: Android自定义控件系列(7) 版权声明:转载注 ...
- Android向系统日历中添加日程事件
转自Android向系统日历中添加日程事件 总结 在项目开发中,我们有预约提醒.定时提醒需求时,可以使用系统日历来辅助提醒: 通过向系统日历中写入事件.设置提醒方式(闹钟),实现到时间自动提醒的功能: ...
- 调用Android自带日历功能
Android手机配备有一个内置的日历应用程序.第三方应用程序可以利用日历内容提供商接口读取用户的日历信息和安排在日历新的事件.这个日历可以直接同步用户的谷歌日历. 不幸的是,没有文档和Android ...
- android 案例:从另一个activity选择信息并获取返回值
主窗口: package com.example.test; import android.app.Activity; import android.app.AlertDialog; import a ...
- Android向系统日历添加日程提醒事件
在项目开发过程中,有时会有预约提醒.定时提醒等需求,这时我们可以使用系统日历来辅助提醒.通过向系统日历中写入事件.设置提醒方式(闹钟),实现到达某个特定的时间自动提醒的功能.这样做的好处是由于提醒功能 ...
- Android -- 案例学习积累
Theme ActionBar / ToolBar android.support.design.widget.CollapsingToolbarLayout android.support.desi ...
随机推荐
- 插入排序--python
import random def insert_sort(nums): # 排序趟数 for i in range(1, len(nums)): current = nums[i] pre_inde ...
- 使用fiddler 抓包app 网络连接不上的原因
https://blog.csdn.net/m0_37554415/article/details/80434477· 设置完记得关掉fiddler 重启 基于fiddler 4 windown 10 ...
- 国产银河麒麟 安装wps 的简单方法
前提说明 银河麒麟 是总部在天津的企业 有国防科大还有 ubuntu的母公司一起在维护 主要的产品有 优麒麟 还有 银河麒麟 优麒麟 可以看做是 国产版的ubuntu的社区版 银河麒麟 则是 面向国内 ...
- [转帖]Linux下批量替换文件内容方法
Linux下批量替换文件内容方法 https://www.cnblogs.com/fjping0606/p/4428850.html 刚才用到的命令 原作者写的挺好的记录一下 以后 用. 1:查找fi ...
- 【转】mysql的group_concat函数,默认最大长度是1024
mysql的group_concat函数,默认最大长度是1024 查询sql: show variables like 'group_concat_max_len'; 设置方式: 修改配置文件my.i ...
- CentOS7之ssh-Xshell密钥认证登陆
操作系统版本:CentOS Linux release 7.2.1511 (Core) SSH版本:OpenSSH_6.6.1p1, OpenSSL 1.0.1e-fips 1.打开Xshell工 ...
- pgsql物理复制(pgsql 备库的搭建以及角色互换,提升)
结构图如下: Postgresql早在9.0版本开始支持物理复制,也称为流复制,通过从实例级复制出一个与主库一模一样的备库.流复制同步方式有同步,异步两种,如果主节点和备节点不是很忙,通常异步模式下备 ...
- element-ui使用el-tabs组件的时候浏览器直接卡死的问题
遇到这个问题的原由是:本身自己项目的elementUI版本是2.0.11较低了,项目有个功能是自定义progress进度条颜色,无奈高版本的才有这个配置,所以就升级了elementUI,升级到了最高版 ...
- sql server 获取整数的函数ceiling(x)和floor(x)
--ceiling(x)返回不小于x的最小整数值,floor(x)返回不大于x的最大整数值 示例:select CEILING(-3.35), CEILING(3.35), FLOOR(-3.35), ...
- 手把手教你如何安装使用webpack vue cli
1.安装node.js:https://nodejs.org/en/download/(看电脑的系统是多少位下载相应版本) 我下载的是Windows Installer(.msi) x64 2.打开c ...