2023年7月13日发(作者:)
Android——待办事项(ToDoList)⼀:实现功能1:创建待办事项的显⽰与完成待办事项时的显⽰2:搜索已经存在的代办事项3:⽇历(阳历阴历转换)代码如下:如下:public class MainActivity extends AppCompatActivity {private Button EXEInout, EXESearch;private Button btn_List,btn_Calendar,btn_Complete;private static EditText InputContent, SearchContent,SerialNumber,SearchSerialNumber;private static EditText GetContent,GetSerialNumber,GetContent1,GetSerialNumber1,GetContent2,GetSerialNumber2;private CheckBox checkBox,checkBox1,checkBox2;public static int count = 1;public static String ID = null;public static String Content = null;Dao dao = null;@Overrideprotected void onCreate(Bundle savedInstanceState) { te(savedInstanceState); setContentView(ty_main); EXEInout = (Button) findViewById(ut); EXESearch = (Button) findViewById(rch); btn_Complete = (Button) findViewById(te); btn_List = (Button) findViewById(); btn_Calendar = (Button) findViewById(ar); GetContent = (EditText) findViewById(tent); GetSerialNumber = (EditText) findViewById(ialNumber);//序号 GetContent1 = (EditText) findViewById(tent1); GetSerialNumber1 = (EditText) findViewById(ialNumber1);//序号 GetContent2 = (EditText) findViewById(tent2); GetSerialNumber2 = (EditText) findViewById(ialNumber2);//序号 SerialNumber = (EditText) findViewById(Number); checkBox = (CheckBox) findViewById(ox); checkBox1 = (CheckBox) findViewById(ox1); checkBox2 = (CheckBox) findViewById(ox2); InputContent = (EditText) findViewById(ontent); SearchContent = (EditText) findViewById(Content); SearchSerialNumber = (EditText) findViewById(SerialNumber); //⽤于查找待办事项 lickListener(new kListener() { @Override public void onClick(View v) { dao = new Dao(); String SearchID = t().toString(); String Content = (SearchID); t(Content); } }); //⽤于添加待办事项 lickListener(new kListener() { @Override public void onClick(View v) { dao = new Dao(); ID = t().toString(); Content = t().toString(); if (("") && ("")) { xt(,"输⼊的待办事项不能为空",_SHORT).show(); return ; return ; } (new DataBase(ID,Content)); if (count == 1) { ibility(E); ibility(E); ibility(E);//可见 t(ID); t(Content); } if (count == 2) { ibility(E); ibility(E); ibility(E);//可见 t(ID); t(Content); } if (count == 3) { ibility(E); ibility(E); ibility(E);//可见 t(ID); t(Content); } count++; if (count > 3) xt(,"待办事项存在太多了,请做完⼀些在添加吧!",_SHORT).show(); Log.d("Count",count+""); Log.d(,ID); Log.d(,Content); //清除数据库专⽤ //for (int i = 0; i< 50;i++) //(i+""); // setListen(); } }); //(可见不可见占位置,只是消失,隐藏不会占据屏幕位置) //如果被选择就使checkbox,序号,EditText三个为隐藏,并传到另⼀个⼀个页⾯ //⽤于提交待办事项(表⽰已完成) btn_lickListener(new kListener() { @Override public void onClick(View v) { Intent intent = null; switch (JudgeCheckBoxStatus()) { case 1: ibility(); ibility(); ibility(); count--;//完成⼀件待办事项,减少⼀次计数,⽅便下⼀次添加待办事项 intent = new Intent(, ); break; case 2: ibility(); ibility(); ibility(); count--;//完成⼀件待办事项,减少⼀次计数,⽅便下⼀次添加待办事项 intent = new Intent(, ); break; case 3: ibility(); ibility(); ibility(); ibility(); count--;//完成⼀件待办事项,减少⼀次计数,⽅便下⼀次添加待办事项 intent = new Intent(, ); break; } startActivity(intent); } }); //跳转到⽇历视图 btn_lickListener(new kListener() { @Override public void onClick(View v) { Intent intent = null; intent = new Intent(, ); startActivity(intent); } });}//⽤于判断是否已经完成,存在漏洞int JudgeCheckBoxStatus(){ if (ked() == true){ return 1; } if (ked() == true){ return 2; } if (ked() == true){ return 3; } return 0;}}/***************************************************************************分割线*******************************************************************/activity_代码如下: /***************************************************************************分割线*******************************************************************/代码如下 public class Completed extends AppCompatActivity { private Button btn_Receive; privateRecyclerView recyclerView; private List dataBaseList = new ArrayList<>(); private MyRecyclerView myRecyclerView; privateDataBase dataBase; private TextView Title; private int count = 1; Dao dao = null; private String GetContent = null; @Overrideprotected void onCreate(Bundle savedInstanceState) { te(savedInstanceState);setContentView(ty_completed); Title = (TextView) findViewById(); recyclerView = (RecyclerView) findViewById(erViewItem); btn_Receive = (Button) findViewById(_Receive); //设置布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(); outManager(layoutManager); //设置适配器 myRecyclerView = new MyRecyclerView(dataBaseList); pter(myRecyclerView); btn_lickListener(new kListener() { DataBase dataBase = new DataBase(); @Override public void onClick(View v) { String CompletedID = ; String CompletedContent = t; if (! ("".equals(CompletedID)) && ( "".equals(CompletedContent))) { xt(,"内容不能为空",_SHORT).show(); } else { dataBase = new DataBase(CompletedID, CompletedContent);//获取实例 (dataBase);//添加数据 ItemChanged(() - 1); ToPosition(() - 1); } } });}/********分割线/activity_界⾯如图所⽰:activity_代码如下:/***************************************************************************分割线*******************************************************************/(实例化数据类) 代码如下: public class DataBase { private String id; private String Content; private static final intCheck = 1;//⽤于判断状态待办事项是否已经完成 private static final int NotCheck = 0; public String getId() { return id; } publicString getContent() { return Content; }public DataBase() { super();}public DataBase(String id, String Content) { super(); = id; t = Content;}}/********分割线/Sqlite数据库代码如下(实现CRUD)public class Dao {public static final String TAG = “DataBase”;private Helper helper ;private SQLiteDatabase DB;public Dao(Context context){helper = new Helper(context);}public void Insert(DataBase dataBase){DB = dableDatabase();if (()){ContentValues values = new ContentValues();(,());(t,tent());long RowId = (ame,null,values);if(RowId == -1)Log.i(TAG, “数据插⼊失败!”);elseLog.i(TAG, “数据插⼊成功!”+RowId);}}//根据序号删除数据//当前id为暂不为序号public void Delete(String id){DB = dableDatabase();if (()){String whereClause = “ID = ?”;String[] whereArgs = {id + “”};int count = (ame, whereClause, whereArgs);if (count > 0)Log.i(TAG, "删除了: " + count + “⾏”);elseLog.i(“todolist”, “数据未删除!”);(); // 数据库关闭}}public void Update(String id ,String Content){DB = tableDatabase();if(()) { // 如果数据库打开, 执⾏添加的操作ContentValues values = new ContentValues();(“ID”,id);(“Content”, Content);int count = (ame, values, “_ID = ?”, new String[]{id + “”});if (count > 0)Log.i(TAG, "修改了: " + count + “⾏”);elseLog.i(“todolist”, “数据未删除!”);(); // 数据库关闭}}public String Query(String id){DB = dableDatabase();//selection查询⼦句的条件,可以使⽤主键查询String[] columns = {“ID”, “Content”}; // 需要的列String selection = “ID = ?”;String[] selectionArgs = {id + “”};Cursor cursor = (ame,columns,selection,selectionArgs,null,null,null);if (First()){if(cursor != null && First()) {//String _id = ing(0);String Content = ing(1);();return Content;}();();}return null;}public List QueryAll() {DB = dableDatabase(); // 获得⼀个只读的数据库对象if(()) {String[] columns = {“ID”, “Content”}; // 需要的列String selection = null; // 选择条件, 给null查询所有String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序Cursor cursor = (ame, columns, selection, selectionArgs, groupBy, having, orderBy);String id;String Content;if(cursor != null && nt() > 0) {List DataBaseList = new ArrayList();while(Next()) { // 向下移⼀位, 知道最后⼀位, 不可以往下移动了, 停⽌.id = ing(0);Content = ing(1);(new DataBase(id, Content));}();return DataBaseList;}();}return null;}}/********分割线/Helper类代码如下(数据库创建类继承SQLiteOpenHelper)public class Helper extends SQLiteOpenHelper {public static final String TableName = “ToDoList”;public static final String ID = “ID”;public static final String Content = “Content”;private static final String DataBase = “”;private static final Factory Factory = null;public static final int version = 1;public Helper(@Nullable Context context) { super(context, DataBase, Factory, version);}@Overridepublic void onCreate(SQLiteDatabase db) { // 操作数据库 String sql = "create table " + TableName + "("+ID+" varchar(20) primary key, "+Content+" varchar(20));"; L(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { L("drop table if exists "+TableName); onCreate(db);}}/********分割线/MyRecyclerView类代码如下(继承r)//使⽤此类必须先导⼊闭包implementation ‘t:recyclerview-v7:27.1.1’(闭包版本很多)public class MyRecyclerView extends r {private List DataBaseList;public MyRecyclerView (List DataBaseList){seList = DataBaseList;}@NonNull@Override//获取布局public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = (text()).inflate(erview_item,parent,false); return new ViewHolder(view);}//给⼦控件赋值@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) { DataBase dataBase = (position); cked(true);//设置勾选 t(());//设置完成待办事项的序号 t(tent());//设置完成待办事项的内容}@Overridepublic int getItemCount() { return ();}static class ViewHolder extends lder { CheckBox checkBox; EditText SearchSerialNumber,Content; public ViewHolder(@NonNull View itemView) { super(itemView); checkBox = (CheckBox) ewById(erViewCheckbox); SearchSerialNumber = (EditText) ewById(erViewSerialNumber); Content = (EditText) ewById(erViewContent); }}}/********分割线/Lunar类(⽤于⽇历的阳历和阴历转换)package stdemo;import ssLint;import xception;import DateFormat;import ar;import ;public class Lunar {private final int year;private final int month;private final int day;private boolean leap;//阴历⽉份表⽰形式final static String[] LunarMonthStyle = {“⼀”, “⼆”, “三”, “四”, “五”, “六”, “七”, “⼋”, “九”, “⼗”, “⼗⼀”,“⼗⼆”};@SuppressLint(“SimpleDateFormat”)static SimpleDateFormat chineseDateFormat = new SimpleDateFormat(“yyyy年MM⽉dd⽇”);final static long[] lunarInfo = new long[]{0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2,0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977,0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970,0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950,0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557,0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0,0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0,0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6,0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570,0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0,0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5,0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930,0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530,0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45,0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0};//====== 传回农历 y年的总天数final private static int yearDays(int y) { int i, sum = 348; for (i = 0x8000; i > 0x8; i >>= 1) { if ((lunarInfo[y - 1900] & i) != 0) sum += 1; } return (sum + leapDays(y));}//====== 传回农历 y年闰⽉的天数final private static int leapDays(int y) { if (leapMonth(y) != 0) { if ((lunarInfo[y - 1900] & 0x10000) != 0) return 30; else return 29; } else return 0;}//====== 传回农历 y年闰哪个⽉ 1-12 , 没闰传回 0final private static int leapMonth(int y) { return (int) (lunarInfo[y - 1900] & 0xf);}//====== 传回农历 y年m⽉的总天数final private static int monthDays(int y, int m) { if ((lunarInfo[y - 1900] & (0x10000 >> m)) == 0) return 29; return 29; else return 30;}//====== 传回农历 y年的⽣肖final public String animalsYear() { final String[] Animals = new String[]{"⿏", "⽜", "虎", "兔", "龙", "蛇", "马", "⽺", "猴", "鸡", "狗", "猪"}; return Animals[(year - 4) % 12];}//====== 传⼊ ⽉⽇的offset 传回⼲⽀, 0=甲⼦final private static String cyclicalm(int num) { final String[] TianGan = new String[]{"甲", "⼄", "丙", "丁", "戊", "⼰", "庚", "⾟", "壬", "癸"}; final String[] JiaZi = new String[]{"⼦", "丑", "寅", "卯", "⾠", "巳", "午", "未", "申", "⾣", "戌", "亥"}; return (TianGan[num % 10] + JiaZi[num % 12]);}//====== 传⼊ offset 传回⼲⽀, 0=甲⼦final public String cyclical() { int num = year - 1900 + 36; return (cyclicalm(num));}public String getLunarMonthString() { // TODO Auto-generated method stub return null;}public Lunar(Calendar cal) { @SuppressWarnings("unused") int yearCyl, monCyl, dayCyl; int leapMonth = 0; Date baseDate = null; try { baseDate = ("1900年1⽉31⽇"); } catch (ParseException e) { tackTrace(); //To change body of catch statement use Options | File Templates. } //求出和1900年1⽉31⽇相差的天数 assert baseDate != null; int offset = (int) ((e().getTime() - e()) / 86400000L); dayCyl = offset + 40; monCyl = 14; //⽤offset减去每农历年的天数 // 计算当天是农历第⼏天 //i最终结果是农历的年份 //offset是当年的第⼏天 int iYear, daysOfYear = 0; for (iYear = 1900; iYear < 2050 && offset > 0; iYear++) { daysOfYear = yearDays(iYear); offset -= daysOfYear; monCyl += 12; } if (offset < 0) { offset += daysOfYear; iYear--; monCyl -= 12; } //农历年份 //农历年份 year = iYear; yearCyl = iYear - 1864; leapMonth = leapMonth(iYear); //闰哪个⽉,1-12 leap = false; //⽤当年的天数offset,逐个减去每⽉(农历)的天数,求出当天是本⽉的第⼏天 int iMonth, daysOfMonth = 0; for (iMonth = 1; iMonth < 13 && offset > 0; iMonth++) { //闰⽉ if (leapMonth > 0 && iMonth == (leapMonth + 1) && !leap) { --iMonth; leap = true; daysOfMonth = leapDays(year); } else daysOfMonth = monthDays(year, iMonth); offset -= daysOfMonth; //解除闰⽉ if (leap && iMonth == (leapMonth + 1)) leap = false; if (!leap) monCyl++; } //offset为0时,并且刚才计算的⽉份是闰⽉,要校正 if (offset == 0 && leapMonth > 0 && iMonth == leapMonth + 1) { if (leap) { leap = false; } else { leap = true; --iMonth; --monCyl; } } //offset⼩于0时,也要校正 if (offset < 0) { offset += daysOfMonth; --iMonth; --monCyl; } month = iMonth; day = offset + 1;}public static String getChinaDayString(int day) { String[] chineseTen = {"初", "⼗", "廿", "三"}; int n = day % 10 == 0 ? 9 : day % 10 - 1; if (day > 30) return ""; if (day == 10) return "初⼗"; else return chineseTen[day / 10] + LunarMonthStyle[n];}public String toString() { return (leap ? "闰" : "") + LunarMonthStyle[month - 1] + "⽉" + getChinaDayString(day);}
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689215808a222245.html
评论列表(0条)