测试实体类 Memoir
1 package com.memoir.entity; 2 3 import com.memoir.configs.MemoirConfig; 4 5 import net.tsz.afinal.annotation.sqlite.Id; 6 import net.tsz.afinal.annotation.sqlite.Table; 7 8 @Table(name=MemoirConfig.MEMOIRE_TABLE_NAME) //自定义创建表名 否则 表名默认为 com_memoir_entity_memoir 9 public class Memoir { 10 11 @Id(column="id")//自定义主键名称 12 private String id; 13 private String title; 14 private String memoir; 15 private String createDate; 16 private String lstModDate; 17 //get set 方法不可少 18 public String getId() { 19 return id; 20 } 21 22 public void setId(String id) { 23 this.id = id; 24 } 25 26 public String getTitle() { 27 return title; 28 } 29 30 public void setTitle(String title) { 31 this.title = title; 32 } 33 34 public String getMemoir() { 35 return memoir; 36 } 37 38 public void setMemoir(String memoir) { 39 this.memoir = memoir; 40 } 41 42 public String getCreateDate() { 43 return createDate; 44 } 45 46 public void setCreateDate(String createDate) { 47 this.createDate = createDate; 48 } 49 50 public String getLstModDate() { 51 return lstModDate; 52 } 53 54 public void setLstModDate(String lstModDate) { 55 this.lstModDate = lstModDate; 56 } 57 58 }
记录列表类 MemoirsActivity.java
1 package com.memoir.activity; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import net.tsz.afinal.FinalActivity; 7 import net.tsz.afinal.FinalDb; 8 import net.tsz.afinal.annotation.view.ViewInject; 9 10 import com.memoir.R; 11 import com.memoir.common.AndroidTools; 12 import com.memoir.common.TypeChangeFunction; 13 import com.memoir.configs.MemoirConfig; 14 import com.memoir.entity.Memoir; 15 16 import android.app.AlertDialog; 17 import android.content.DialogInterface; 18 import android.content.Intent; 19 import android.os.Bundle; 20 import android.view.KeyEvent; 21 import android.view.Menu; 22 import android.view.MenuItem; 23 import android.view.View; 24 import android.view.ViewGroup; 25 import android.widget.AdapterView; 26 import android.widget.AdapterView.OnItemClickListener; 27 import android.widget.AdapterView.OnItemLongClickListener; 28 import android.widget.BaseAdapter; 29 import android.widget.Button; 30 import android.widget.ListView; 31 import android.widget.TextView; 32 33 public class MemoirsActivity extends FinalActivity { 34 // 定义选项菜单 35 private static final int DB_ISNERT = 0x11; 36 private static final int EXIT = 0x12; 37 38 //listview 39 @ViewInject(id=R.id.listMemoirs) ListView lv; 40 @ViewInject(id=R.id.btnAdd,click="btnAddClick") Button btnAdd ; //注解控件对象和事件 41 List<Memoir> mListViewData = new ArrayList<Memoir>(); 42 43 ArrayList<String> al = new ArrayList<String>(); 44 FinalDb fd;//定义finaldb 45 46 @Override 47 public void onCreate(Bundle savedInstanceState) { 48 super.onCreate(savedInstanceState); 49 setContentView(R.layout.memoirs); 50 initListData(); 51 lv.setOnItemLongClickListener(new OnLvItemLongOnclick()); 52 lv.setOnItemClickListener(new OnLvItemclickListen()); 53 } 54 55 public void btnAddClick(View v){ 56 Intent intent = new Intent(MemoirsActivity.this, AddMemoirActivity.class); 57 this.startActivityForResult(intent, 30); 58 } 59 60 @Override 61 public boolean onCreateOptionsMenu(Menu menu) 62 { 63 menu.add(0, DB_ISNERT, 0, "添加记录"); 64 menu.add(0, EXIT, 0, "退出程序"); 65 return super.onCreateOptionsMenu(menu); 66 } 67 68 /** 69 * 初始化列表信息 70 */ 71 private void initListData(){ 72 fd = FinalDb.create(this,MemoirConfig.DB_NAME);//创建数据库 后面参数为自定义库名 否则为FinalDb 73 mListViewData.clear(); 74 mListViewData.addAll(fd.findAll(Memoir.class)); 75 mListAdapter.notifyDataSetChanged(); 76 lv.setAdapter(mListAdapter); 77 78 } 79 80 private BaseAdapter mListAdapter = new BaseAdapter() { 81 @Override 82 public View getView(int position, View convertView, ViewGroup parent) { 83 View item = View.inflate(MemoirsActivity.this, R.layout.listitem, null); 84 Memoir memo= mListViewData.get(position); 85 86 TextView txtID = (TextView) item.findViewById(R.id.textId); 87 txtID.setVisibility(View.GONE); 88 TextView txtTitle = (TextView) item.findViewById(R.id.txtTitle); 89 TextView txtMemoir = (TextView) item.findViewById(R.id.txtMemoir); 90 TextView txtCreateDate = (TextView) item.findViewById(R.id.txtCreateDate); 91 TextView txtLstModDt = (TextView) item.findViewById(R.id.txtLstModDt); 92 93 txtID.setText(memo.getId()); 94 txtTitle.setText(getStringTxt(R.string.title)+" " +memo.getTitle()); 95 txtMemoir.setText(getStringTxt(R.string.memoir)+" "+memo.getMemoir()); 96 txtCreateDate.setText(getStringTxt(R.string.createdate)+" "+memo.getCreateDate()); 97 txtLstModDt.setText(getStringTxt(R.string.lstmoddate)+" "+memo.getLstModDate()); 98 return item; 99 } 100 101 @Override 102 public long getItemId(int position) { 103 return position; 104 } 105 106 @Override 107 public Object getItem(int position) { 108 return mListViewData.get(position); 109 } 110 111 @Override 112 public int getCount() { 113 return mListViewData.size(); 114 } 115 116 }; 117 118 @Override 119 protected void onActivityResult(int requestCode, int resultCode, 120 Intent intent) { 121 if (intent != null) { 122 if (resultCode==RESULT_OK){ 123 // al = intent.getStringArrayListExtra("data"); 124 // if (al.size()>0){ 125 initListData(); 126 // } 127 } 128 } 129 } 130 131 @Override 132 public boolean onOptionsItemSelected(MenuItem item){ 133 switch(item.getItemId()) 134 { 135 case DB_ISNERT: 136 // 跳转添加界面 137 Intent intent = new Intent(MemoirsActivity.this, AddMemoirActivity.class); 138 this.startActivityForResult(intent, 30); 139 break; 140 case EXIT: 141 //退出 142 AndroidTools.exitShowDialog(MemoirsActivity.this); 143 break; 144 } 145 return super.onOptionsItemSelected(item); 146 } 147 148 149 /** 150 * 151 * @param tag 152 * @return 153 */ 154 public String getStringTxt(int tag){ 155 return TypeChangeFunction.toString(MemoirsActivity.this.getResources().getText(tag)); 156 } 157 158 /** 159 * 菜单、返回键响应 160 */ 161 @Override 162 public boolean onKeyDown(int keyCode, KeyEvent event) { 163 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 164 AndroidTools.exitBy2Click(this); 165 } 166 return false; 167 } 168 169 // listview点击事件 170 class OnLvItemclickListen implements OnItemClickListener { 171 @Override 172 public void onItemClick(AdapterView<?> parent, View view, int position, 173 long id) { 174 //修改 175 Intent intent = new Intent(MemoirsActivity.this, AddMemoirActivity.class); 176 177 Memoir m = mListViewData.get(position); 178 al.clear(); 179 al.add(0,m.getId()); 180 al.add(1,m.getTitle()); 181 al.add(2,m.getMemoir()); 182 al.add(3,m.getCreateDate()); 183 al.add(4,m.getLstModDate()); 184 intent.putStringArrayListExtra("data", al); 185 MemoirsActivity.this.startActivityForResult(intent, 30); 186 } 187 188 } 189 190 // listview长按事件 191 class OnLvItemLongOnclick implements OnItemLongClickListener { 192 @Override 193 public boolean onItemLongClick(AdapterView<?> parent, View view, 194 final int position, long id) { 195 new AlertDialog.Builder(MemoirsActivity.this).setTitle("提示") 196 .setMessage("是否确定删除选中的记录") 197 .setPositiveButton("确定", new DialogInterface.OnClickListener() { 198 @Override 199 public void onClick(DialogInterface dialog, int which) { 200 // int positon = Integer.valueOf(v.getTag().toString()); 201 Memoir memo = mListViewData.get(position); 202 try{ 203 //删除 204 fd.deleteById(Memoir.class, memo.getId()); 205 206 mListAdapter.notifyDataSetChanged(); 207 lv.setAdapter(mListAdapter); 208 }catch(Exception e){ 209 e.printStackTrace(); 210 } 211 212 } 213 214 }).setNegativeButton("取消", null).show(); 215 return false; 216 } 217 218 } 219 }
添加修改记事类 AddMemoirActivity.java
1 package com.memoir.activity; 2 3 import java.util.ArrayList; 4 import com.memoir.R; 5 import com.memoir.common.DateUtils; 6 import com.memoir.common.GUID; 7 import com.memoir.common.Tools; 8 import com.memoir.configs.MemoirConfig; 9 import com.memoir.entity.Memoir; 10 11 import net.tsz.afinal.FinalActivity; 12 import net.tsz.afinal.FinalDb; 13 import net.tsz.afinal.annotation.view.ViewInject; 14 15 import android.os.Bundle; 16 import android.view.KeyEvent; 17 import android.view.View; 18 import android.widget.Button; 19 import android.widget.EditText; 20 import android.widget.Toast; 21 import android.content.Intent; 22 23 public class AddMemoirActivity extends FinalActivity { 24 25 @ViewInject(id=R.id.edtTitle) EditText edtTitle; 26 @ViewInject(id=R.id.edtMemoir) EditText edtMemoir; 27 @ViewInject(id=R.id.btnSave,click="btnSaveClick") Button btnSave; 28 @ViewInject(id=R.id.btnCancel,click="btnCancelClick") Button btnCancel; 29 30 ArrayList<String> al = new ArrayList<String>(); 31 boolean isSuccess = false; 32 33 @Override 34 public void onCreate(Bundle savedInstanceState) { 35 super.onCreate(savedInstanceState); 36 super.setTitle("添加杂记"); 37 38 setContentView(R.layout.addmemoir); 39 //接收数据 40 if(this.getIntent().getStringArrayListExtra("data") !=null){ 41 al = this.getIntent().getStringArrayListExtra("data"); 42 if (al.size()>0){ 43 edtTitle.setText(nullToString(al.get(1))); 44 edtMemoir.setText(nullToString(al.get(2))); 45 } 46 } 47 48 } 49 50 /** 51 * 52 * @param v 53 */ 54 public void btnSaveClick(View v){ 55 String checkStr = checkForm(); 56 if ("".equals(checkStr)){ 57 String title = nullToString(edtTitle.getText()).trim(); 58 String memoir = nullToString(edtMemoir.getText()).trim(); 59 60 String createDate = ""; 61 String lstModDt = ""; 62 String ID=""; 63 if (!"".equals(nullToString(al.get(0)))){ 64 ID = nullToString(al.get(0)); 65 createDate = nullToString(al.get(3)); 66 67 if (!title.equals(nullToString(al.get(1)))|| !memoir.equals(nullToString(al.get(2)))){ 68 lstModDt = Tools.nowDate(); 69 }else{ 70 lstModDt = nullToString(al.get(4)); 71 } 72 }else{ 73 ID = GUID.newGUID(); 74 createDate = DateUtils.getCurrDateStr(); 75 lstModDt = Tools.nowDate(); 76 } 77 78 try { 79 if (!title.equals(nullToString(al.get(1)))|| !memoir.equals(nullToString(al.get(2)))){ 80 FinalDb fd = FinalDb.create(this,MemoirConfig.DB_NAME); 81 Memoir memo = new Memoir(); 82 memo.setId(ID); 83 memo.setTitle(title); 84 memo.setMemoir(memoir); 85 memo.setCreateDate(createDate); 86 memo.setLstModDate(lstModDt); 87 88 if (!"".equals(nullToString(al.get(1)))){ 89 fd.update(memo); 90 }else{ 91 fd.save(memo);//此方法保存数据 通过源码 看出是把类中的属性转换为字段 进行拼接建表语句和插入数据 92 } 93 94 // al.clear(); 95 // al.add(0, ID); 96 // al.add(1, title); 97 // al.add(2, memoir); 98 // al.add(3, createDate); 99 // al.add(4, lstModDt); 100 isSuccess = true; 101 } 102 resultData(); 103 104 } catch (Exception e) { 105 // TODO: handle exception 106 showToast("添加失败!"); 107 } 108 109 }else{ 110 showToast(checkStr); 111 } 112 } 113 114 public String checkForm(){ 115 String str = ""; 116 if ("".equals(nullToString(edtTitle.getText()))){ 117 str = "标题不能为空!"; 118 }else if("".equals(nullToString(edtMemoir.getText()))){ 119 str = "内容不能为空!"; 120 } 121 122 return str; 123 } 124 125 /** 126 * 转换 127 * @param str 128 * @return 129 */ 130 public String nullToString(Object obj){ 131 return obj==null?"":obj.toString(); 132 } 133 134 /** 135 * 136 * @param v 137 */ 138 public void btnCancelClick(View v){ 139 resultData(); 140 } 141 142 private void showToast(String strMsg){ 143 Toast.makeText(this, strMsg, Toast.LENGTH_LONG).show(); 144 } 145 146 /** 147 * Back键监听 148 */ 149 @Override 150 public boolean onKeyDown(int keyCode, KeyEvent event) 151 { 152 if (keyCode == KeyEvent.KEYCODE_BACK) 153 { 154 resultData(); 155 } 156 157 return false; 158 } 159 160 private void resultData(){ 161 Intent intent = new Intent(); 162 if (isSuccess){ 163 // intent.putStringArrayListExtra("data",al); 164 165 setResult(RESULT_OK, intent); 166 } 167 168 this.finish(); 169 // SysApplication.getInstance().moveActivity(this); 170 } 171 172 }
- 使用@ViewInject一定要继承FinalActivity类 否则无效
- 运用中最新的0.5版本绑定事件有问题 此demo用0.3.3版本
附件源码下载