我的Android案例—簽到日曆

來源:互聯網
上載者:User

標籤:android gridview

2015年的Android案例之旅案例八:簽到日曆知識點:
  1. GridView的使用
  2. SQLite的使用
涉及檔案:
  1. res->layout->activity_main.xml主布局檔案
  2. res->layout->date.xml布局檔案
  3. src->db->DBHelper.javajava檔案
  4. src->db->SignDAO.javajava檔案
  5. src->activity->MainActivity.javajava檔案
activity_main.xml
<!-- 線性布局 --><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_height="match_parent"    android:layout_width="match_parent"    android:orientation="vertical">    <!-- 文本控制項    顯示當前月份 -->    <TextView         android:id="@+id/show"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="月份"/>    <!-- 網格視圖     -->    <GridView         android:id="@+id/myDate"        android:layout_width="match_parent"        android:layout_height="355dp"        android:numColumns="7"></GridView>    <Button         android:id="@+id/sign"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="簽到"/></LinearLayout>
date.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">        <TextView        android:id="@+id/txtWeekDateMB"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"        android:layout_marginTop="10dp"        android:visibility="gone" />    <TextView        android:id="@+id/txtDayDateMB"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginLeft="10dp"        android:layout_marginTop="10dp" /></LinearLayout>
MainActivity.java
public class MainActivity extends Activity {//Log標籤private static final String TAG = "SIGN";//聲明對象private Button sign;private TextView show;private GridView myDate;//擷取本地時間Time nowTime = new Time();//一個月內的天數private int dayMaxNum;private int year,month,day,ym;private SignDAO sdao;//查詢結果private List<String> list = new ArrayList<String>();private ArrayList<HashMap<String, Object>> sinalist,alisttmp;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Log.i(TAG, "SIGN is onCreate");//初始化對象init();//初始化資料庫資訊initdata();myDate.setOnItemClickListener(new OnItemClickListener(){@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {//判斷是否已經簽到 從伺服器擷取簽到資訊//類比從本機資料庫擷取資訊if(day==arg2+1)//只能當天簽到{sinalist = sdao.findSinInfo("zhangsan",year+"-"+month+"-"+(arg2+1),"0");if(sinalist.size()>0){Toast.makeText(getApplicationContext(), "已經簽過到不能重複簽到", 200).show();Log.d("", "已簽到");}else{//在資料庫插入一條資料sdao.insertSinInfo("zhangsan", "張三", year+"-"+month+"-"+(arg2+1),year+""+month);initdata();}}}});}/** * @param初始化對象 */private void init(){sign = (Button)this.findViewById(R.id.sign);show = (TextView)this.findViewById(R.id.show);myDate = (GridView)this.findViewById(R.id.myDate);//取本地時間(時間應該從伺服器擷取)nowTime.setToNow();year = nowTime.year;month = nowTime.month+1;day = nowTime.monthDay;show.setText(year+"-"+month+"-"+day);}/** * @param初始化資料庫資訊 */private void initdata(){ sdao = new SignDAO(MainActivity.this); sdao.open(); sinalist = sdao.findSinInfo("zhangsan","",year+""+month);//查詢當月已簽到的日期 list.clear(); dayMaxNum = getCurrentMonthDay(); for(int i=0;i<dayMaxNum;i++){list.add(i, i+1+"");} myDate.setSelector(new ColorDrawable(Color.TRANSPARENT)); myDate.setAdapter(new getDayNumAdapter(getApplicationContext()));}class getDayNumAdapter extends BaseAdapter{Context c;public getDayNumAdapter(Context c){this.c = c;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return list.get(position);}@Overridepublic long getItemId(int arg0) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View v = LinearLayout.inflate(c, R.layout.date, null);TextView txtWeek = (TextView)v.findViewById(R.id.txtWeekDateMB);TextView txtDay = (TextView)v.findViewById(R.id.txtDayDateMB);switch (position){case 0:txtWeek.setText("一");break;case 1:txtWeek.setText("二");break;case 2:txtWeek.setText("三");break;case 3:txtWeek.setText("四");break;case 4:txtWeek.setText("五");break;case 5:txtWeek.setText("六");break;case 6:txtWeek.setText("日");break;}if(position<7){txtWeek.setVisibility(View.VISIBLE);}int lstDay = Integer.parseInt(list.get(position));//標記當前日期if(day==lstDay){txtDay.setText(list.get(position).toString());txtDay.setTextColor(Color.RED);}elsetxtDay.setText(list.get(position).toString());//標記已簽到後的背景for(int i=0;i<sinalist.size();i++){String nowdate = sinalist.get(i).get("sindate").toString();String[] nowdatearr = nowdate.split("-");if(lstDay==Integer.parseInt(nowdatearr[2])){txtDay.setBackgroundColor(Color.BLUE);++ym;}sign.setText("已經簽到天數:"+ym);}return v;}}//擷取當月的 天數 public  int getCurrentMonthDay() {  Calendar a = Calendar.getInstance();  a.set(Calendar.DATE, 1);  a.roll(Calendar.DATE, -1);  int maxDate = a.get(Calendar.DATE);  return maxDate;  }}
DBHelper.java
public class DBHelper extends SQLiteOpenHelper {public DBHelper(Context context) {super(context, "sign.db", null, 1);}/** * @param建立表 */@Overridepublic void onCreate(SQLiteDatabase db) {String sql="create table sinTB(" +"sin_id integer primary key autoincrement," +"userid varchar(20)," +"usernmae varchar(20)," +"sindate varchar(20)," +"yearmonth varchar(20)," +"nowdate integer" +")";db.execSQL(sql);}/** * @param資料庫版本更新時,會調用此方法 */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
SignDAO.java
public class SignDAO {//聲明對象Context context;SQLiteDatabase db;DBHelper dbHelper;public SignDAO(Context context){this.context = context;}/** * @param 開啟資料庫連接 */public boolean open(){dbHelper = new DBHelper(context);db = dbHelper.getWritableDatabase();if(db == null){return false;}return true;}/** * @param關閉串連 */public void close(){dbHelper.close();}/** * @param插入資訊 * @param uid * @param name * @param date * @param ym */public void insertSinInfo(String uid,String name,String date,String month){String sql="insert into sinTB(userid,usernmae,sindate,yearmonth,nowdate) values(?,?,?,?,?)";db.execSQL(sql,new Object[]{uid,name,date,month,System.currentTimeMillis()});}/** * @param查詢資訊 * @param uid * @param date * @param ym * @return */public ArrayList<HashMap<String, Object>> findSinInfo(String uid,String date,String month){ArrayList<HashMap<String,Object>> alist = new ArrayList<HashMap<String,Object>>();alist.clear();HashMap<String, Object> rowMap;String sql;try{if("0".equals(month)){sql="select * from sinTB where userid='"+uid+"' and sindate='"+date+"'";}else{sql="select * from sinTB where userid='"+uid+"' and yearmonth='"+month+"'";}Cursor cur = db.rawQuery(sql, null);cur.moveToFirst();while(cur.moveToNext()){rowMap = new HashMap<String, Object>();rowMap.put("sin_id", cur.getInt(cur.getColumnIndex("sin_id")));rowMap.put("userid", cur.getString(cur.getColumnIndex("userid")));rowMap.put("usernmae", cur.getString(cur.getColumnIndex("usernmae")));rowMap.put("sindate", cur.getString(cur.getColumnIndex("sindate")));long aa = cur.getLong(cur.getColumnIndex("nowdate"));SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = new Date(aa);String date1 = format.format(now);rowMap.put("nowdate", date1);Log.e("", cur.getString(cur.getColumnIndex("sindate")));alist.add(rowMap);}return alist;}catch(Exception e){return alist;}}}






我的Android案例—簽到日曆

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.