<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Android手機開發設計之記事本功能,供大家參考,具體內容如下
1.1業務需求分析
近年來,隨著生活節奏的加快,工作和生活的雙重壓力全面侵襲著人們,如何避免忘記工作和生活中的諸多事情而造成不良的後果就顯得非常重要。為此我們開發一款基於Android系統的簡單記事本,其能夠便攜記錄生活和工作對諸多事情,從而幫助人們有效地進行時間管理。
1.2功能需求分析
本記事本專案希望可以開發出一款符合使用者生活工作習慣的簡單應用,能夠滿足使用者的各方面需求,可以對記事進行增加、檢視、修改和刪除,要求功能完善豐富並且具有良好的使用者介面和互動體驗。
2.1功能模組設計
2.1.1記事本基本操作
記事本基本操作是該專案的核心部分,提供新增、檢視、修改、刪除記事本資訊的功能,提供記事本動態更新的功能。
2.1.2 記事本主介面列表展示
使用者可能需要建立許多記事事項,並且需要對這些記錄事項程序基本操作,記事本的列表展示能使使用者介面更加簡潔清晰,且給使用者帶來使用方便。
2.1.3 記事本資料儲存
記事本最重要功能即記錄和儲存使用者易遺忘的日期和事件,為了持久地將使用者記錄事項資訊儲存下來,需要將這些資訊儲存到資料庫中,記事本需要儲存的資訊欄位有編號、事件內容和儲存事件的具體時間。
其功能模組圖如圖所示。
2.2資料庫設計
由上面的功能模組分析可知,本記事本專案的資料庫設計主要包括三個欄位名:編號id、事件內容content和儲存事件的時間notetime,其資料庫表如下表所示:
2.3介面設計
2.3.1記事本主介面
該介面主要包括新增按鈕和記錄事項列表。記事本主介面設計如下圖所示。
2.3.2 新增記錄事項介面
該介面主要包括清除內容和儲存內容按鈕以及文字編輯。記事本新增記錄事項如下圖所示。
3.1 NotepadBean類
由於記事本中的每個記錄都會有其唯一的編號id、記錄內容notepadContent和儲存記錄的時間notepadTime屬性,因此我們需要建立一個NotepadBean類用於存放這些屬性,並實現其相應的getter和setter方法,其主要程式碼如下:
public class NotepadBean { private String id;//記錄編號 private String notepadContent;//記錄的內容 private String notepadTime;//儲存記錄的時間 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getNotepadContent() { return notepadContent; } public void setNotepadContent(String notepadContent) { this.notepadContent = notepadContent; } public String getNotepadTime() { return notepadTime; } public void setNotepadTime(String notepadTime) { this.notepadTime = notepadTime; } }
3.2 NotepadAdapter類
由於記事本介面的記錄列表是使用ListView控制元件展示,因此需要建立一個資料介面卡NotepadAdapter類對ListView控制元件進行資料適配,我們可以先建立NotepadAdapter類,再在NotepadAdapter類中建立一個ViewHolder類初始化Item介面中的控制元件,其中主要程式碼如下:
public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView==null){//載入Item介面對應的佈局檔案 convertView=layoutInflater.inflate(R.layout.notepad_item,null); viewHolder=new ViewHolder(convertView);//建立ViewHolder物件 convertView.setTag(viewHolder);//建立ViewHolder物件 }else { viewHolder=(ViewHolder) convertView.getTag();//convertView關聯ViewHolder物件 } NotepadBean notepadBean=(NotepadBean)getItem(position);//將獲取的資料顯示到對應的控制元件上 viewHolder.tvNotepadContent.setText(notepadBean.getNotepadContent()); viewHolder.tvNotepadTime.setText(notepadBean.getNotepadTime()); return convertView; } class ViewHolder{ TextView tvNotepadContent; TextView tvNotepadTime; public ViewHolder(View view){ tvNotepadContent=view.findViewById(R.id.item_content);//記錄的內容 tvNotepadTime=view.findViewById(R.id.item_time);//儲存記錄的時間 } }
3.3 SQLiteHelper類
在記事本程式中儲存和讀取記錄的資料都是通過運算元據庫完成的,我們需要建立SQLiteHelper類實現對資料庫中表的增刪改查,以及利用資料庫中的工具類DBUtils來定義資料庫的名稱、表名、資料庫版本、資料庫表中的列名以及獲取當前日期等資訊,其主要程式碼如下:
建立資料庫:
public SQLiteHelper(Context context){ super(context, DBUtils.DATABASE_NAME,null,DBUtils.DATABASE_VERION); sqLiteDatabase=this.getWritableDatabase(); }
建立表:
@Override public void onCreate(SQLiteDatabase db){ db.execSQL("CREATE TABLE "+DBUtils.DATABASE_TABLE+"("+DBUtils.NOTEPAD_ID+" INTEGER PRIMARY KEY AUTOINCREMENT,"+DBUtils.NOTEPAD_CONTENT+" text, "+DBUtils.NOTEPAD_TIME+" text)"); }
新增資料:
public boolean insertData(String userContent,String userTime){ ContentValues contentValues=new ContentValues(); contentValues.put(DBUtils.NOTEPAD_CONTENT,userContent); contentValues.put(DBUtils.NOTEPAD_TIME,userTime); return sqLiteDatabase.insert(DBUtils.DATABASE_TABLE,null,contentValues)>0; }
刪除資料:
public boolean deleteData(String id){ String sql=DBUtils.NOTEPAD_ID+"=?"; String[] contentValuesArray=new String[]{String.valueOf(id)}; return sqLiteDatabase.delete(DBUtils.DATABASE_TABLE,sql,contentValuesArray)>0; }
修改資料:
public boolean updateData(String id,String content,String userYear){ ContentValues contentValues=new ContentValues(); contentValues.put(DBUtils.NOTEPAD_CONTENT,content); contentValues.put(DBUtils.NOTEPAD_TIME,userYear); String sql=DBUtils.NOTEPAD_ID+"=?"; String[] strings=new String[]{id}; return sqLiteDatabase.update(DBUtils.DATABASE_TABLE,contentValues,sql,strings)>0; }
查詢資料:
public List<NotepadBean> query(){ List<NotepadBean>list=new ArrayList<NotepadBean>(); Cursor cursor=sqLiteDatabase.query(DBUtils.DATABASE_TABLE,null,null, null,null,null,DBUtils.NOTEPAD_ID+" desc"); if (cursor!=null){ while (cursor.moveToNext()){ NotepadBean noteInfo=new NotepadBean(); String id=String.valueOf(cursor.getInt(cursor.getColumnIndex(DBUtils.NOTEPAD_ID))); String content=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_CONTENT)); String time=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_TIME)); noteInfo.setId(id); noteInfo.setNotepadContent(content); noteInfo.setNotepadTime(time); list.add(noteInfo); } cursor.close(); } return list; }
3.4 NotepadActivity類
記事本主介面包含顯示列表和新增按鈕功能,我們建立NotepadActivity類實現,其中顯示列表在NotepadActivity類中通過建立showQueryData()方法,在該方法中查詢資料庫存放的記錄資訊,並將該資訊顯示到記錄列表中,其實現程式碼如下:
private void showQueryData(){ if(list!=null){ list.clear(); } list=mSQLiteHelper.query(); adapter=new NotepadAdapter(this,list); listView.setAdapter(adapter); }
為“新增按鈕”通過setOnClickListener()方法設定點選事件,當點選該按鈕時,跳轉到新增記錄的介面,其實現程式碼如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView=findViewById(R.id.listview); ImageView imageView=findViewById(R.id.add); initData(); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(NotepadActivity.this,RecordActivity.class); startActivityForResult(intent,1); } }); }
3.5 RecordActivity類
RecordActivity為修改記錄,我們在NotepadActivity中通過listView的setOnItemClickListener()方法監聽Item的點選事件,攜帶被點選Item的記錄內容跳轉到RecordActivity中,其會根據獲取的資料顯示記錄的內容。另外當我們需要刪除記事本列表中的記錄時,需要長按列表中的Item,此時會彈出一個對話方塊提示是否刪除Item對應的事件。setOnItemClickListener()方法程式碼如下:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ @Override public void onItemClick(AdapterView<?>parent,View view,int position,long id ){ NotepadBean notepadBean=list.get(position); Intent intent=new Intent(NotepadActivity.this,RecordActivity.class); intent.putExtra("id",notepadBean.getId()); intent.putExtra("content",notepadBean.getNotepadContent()); intent.putExtra("time",notepadBean.getNotepadTime()); NotepadActivity.this.startActivityForResult(intent,1); } }); listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { AlertDialog dialog; AlertDialog.Builder builder=new AlertDialog.Builder(NotepadActivity.this) .setMessage("是否刪除此記錄?") .setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { NotepadBean notepadBean=list.get(position); if(mSQLiteHelper.deleteData(notepadBean.getId())){ list.remove(position);//刪除對應的Item adapter.notifyDataSetChanged();//更新記事本頁面 Toast.makeText(NotepadActivity.this,"刪除成功",Toast.LENGTH_LONG).show(); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); dialog=builder.create(); dialog.show(); return true; } });
RecordActivity利用initData()函數接收傳遞的資料去,其程式碼如下:
public void initData(){ mSQLiteHelper=new SQLiteHelper(this); noteName.setText("新增記錄"); Intent intent=getIntent(); if(intent!=null){ id=intent.getStringExtra("id"); if(id!=null){ noteName.setText("修改記錄"); content.setText(intent.getStringExtra("content")); note_time.setText(intent.getStringExtra("time")); note_time.setVisibility(View.VISIBLE); } } }
同時,我們在RecordActivity中可以利用switch…case結構實現了編輯記錄、儲存和清除編輯的記錄的功能,即通過EditText控制元件實現記錄的編輯功能,為儲存按鈕設定點選事件;當點選儲存按鈕時將記錄的內容和儲存時間通過SQLiteHelper類的insertData()方法新增到資料庫中;為清除按鈕設定點選事件,當點選清除按鈕時,將EditText控制元件的內容通過setText()方法置為空字串。其OnClick()函數程式碼如下:
public void onClick(View v){ switch (v.getId()){ case R.id.note_back: finish(); break; case R.id.delete: content.setText(" "); break; case R.id.note_save: String noteContent =content.getText().toString().trim(); if(id!=null){ //修改記錄的功能 if(noteContent.length()>0){ if (mSQLiteHelper.updateData(id,noteContent,DBUtils.getTime())){ showToast("修改成功"); setResult(2); finish(); }else{ showToast("修改失敗"); } } else{ showToast("修改的記錄內容不能為空"); } }else{ //新增記錄的功能 if(noteContent.length()>0){ if (mSQLiteHelper.insertData(noteContent,DBUtils.getTime())){ showToast("儲存成功"); setResult(2); finish(); }else{ showToast("儲存失敗"); } } else{ showToast("儲存的記錄內容不能為空"); } } break; } }
1、專案執行主介面。
2、點選主介面新增進入新增頁面,輸入“Android課程設計”然後點選儲存按鈕會返回主介面並彈出“儲存成功”資訊。
3、長按我們剛剛新建的記錄“Android課程設計”會彈出刪除對話方塊,點選確定即可刪除,並彈出“刪除成功”資訊。
4、選擇並開啟“20182800”記錄,將其修改為“20180000”,然後點選儲存按鈕,會彈出“修改成功”的資訊。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45