简单的记事本(SQLite+自定义adapter)
来源:互联网 发布:2013cctv网络春晚韩庚 编辑:程序博客网 时间:2024/06/03 23:42
初学者学习android,做这个小demo时遇到过很多挫折。具体不说了。就简单的说一下这个demo的思路。
1、写一个实体类,里面定义这个demo需要的内容,然后写getXX()和setXX()。
2、首先新建一个数据库类继承SQLiteOpenHelper。在这个类里面进行创建数据库,数据库版本,数据表。
3、然后新建一个类用来对数据库进行增删查改操作。
4、写一个适配器,是view能在listview上展示的桥梁。
5、对各个页面写代码实现功能。
1、写一个实体类,里面定义这个demo需要的内容,然后写getXX()和setXX()
public class note implements Serializable { private int id; private String title; private String time; private String content; //必须要有无参构造函数 public note(){ } //有参构造函数 public note(int id,String title,String time,String content){ this.id=id; this.title=title; this.time=time; this.content=content; } public String getTitle(){ return title; } public void setTitle(String title) { this.title = title; } public String getTime(){ return time; } public void setTime(String time){ this.time=time; } public String getContent(){ return content; } public void setContent(String content){ this.content=content; } public Integer getId(){ return id; } public void setId(int id){ this.id=id; }}
2、新建一个数据库类继承SQLiteOpenHelper。在这个类里面进行创建数据库,数据库版本,数据表。
public class MyNoteHelper extends SQLiteOpenHelper{ //数据库名称 private static final String DATABASE_NAME="noteDB.db"; //数据库版本 private static int DATABASE_VERSION=1; //构造函数 public MyNoteHelper(Context context){ super(context,DATABASE_NAME,null,DATABASE_VERSION); } //创建表 public static final String CREATE_TABLE="CREATE TABLE IF NOT EXISTS MyNotes2("+"id integer primary key autoincrement,"+"title TEXT,"+"time TEXT ,"+"content TEXT)"; @Override public void onCreate(SQLiteDatabase db){ db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){ db.execSQL("ALTER TABLE MyNotes2 ADD COLUMN other String"); onCreate(db); }}
2、新建一个类用来对数据库进行增删查改操作。
public class NoteManager { private MyNoteHelper helper; private SQLiteDatabase db; private Context context; public NoteManager(Context context){ helper= new MyNoteHelper(context); db=helper.getWritableDatabase();//打开一个读写的数据库 this.context=context; } //插入 public boolean insert(note note){ db.beginTransaction();//开始事务锁 try { db.execSQL("INSERT INTO MyNotes2 VALUES(?,?,?,?)",new Object[]{note.getId(),note.getTitle(),note.getTime(),note.getContent()}); db.setTransactionSuccessful();//完成事务锁 return true; }catch (Exception e){ e.printStackTrace(); return false; }finally { db.endTransaction();//结束事务锁 } } //删除 public void delete(note note){ db.delete("MyNotes2", "id=?", new String[]{String.valueOf(note.getId())}); } //查询 public List<note> query() { List<note> notes = new ArrayList<>(); Cursor c = queryItem(); while (c.moveToNext()) { note note = new note(); note.setId(c.getInt(c.getColumnIndex("id"))); note.setTitle(c.getString(c.getColumnIndex("title"))); note.setContent(c.getString(c.getColumnIndex("content"))); note.setTime(c.getString(c.getColumnIndex("time"))); notes.add(note); } c.close(); return notes; } //更新 public boolean update(note note){ db.beginTransaction(); try { ContentValues values=new ContentValues(); values.put("title",note.getTitle()); values.put("content",note.getContent()); values.put("time", note.getTime()); db.update("MyNotes2", values, "id=?", new String[]{String.valueOf(note.getId())}); db.setTransactionSuccessful(); return true; }catch (Exception e){ e.printStackTrace(); return false; }finally { db.endTransaction(); } }public Cursor queryItem(){ return db.rawQuery("SELECT * FROM MyNotes2",null); //return cursor;} //关闭数据库 public void closeDB(){ db.close(); }}
4、适配器
public class MyAdapter extends BaseAdapter{ private List<note> noteList; private LayoutInflater inflater; private Context context=null; public MyAdapter(Context context,List<note> noteList){ this.context=context; this.noteList=noteList; inflater=LayoutInflater.from(context); } @Override public int getCount(){ return noteList.size(); } @Override public Object getItem(int position){ return noteList.get(position); } @Override public long getItemId(int position){ return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView==null){ convertView=inflater.inflate(R.layout.layout,null); holder=new ViewHolder(); holder.title=(TextView)convertView.findViewById(R.id.title_view); holder.time=(TextView)convertView.findViewById(R.id.time_view); //holder.title.setClickable(true); //holder.time.setFocusable(false); holder.title.setTextColor(Color.BLACK); holder.title.setTextSize(30); holder.time.setTextColor(Color.BLACK); //holder.title.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //holder.time.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //holder.Content=(TextView)convertView.findViewById(R.id.); convertView.setTag(holder); }else{ holder=(ViewHolder)convertView.getTag(); } holder.title.setText(noteList.get(position).getTitle()); holder.time.setText(noteList.get(position).getTime()); return convertView; } class ViewHolder{ TextView title,time; }}
5、listview主页面(MainActivity.class)
public class MainActivity extends AppCompatActivity { private NoteManager noteManager; private MyAdapter adapter; private List<note> notes=new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); noteManager=new NoteManager(this); initView(); } @Override public void onResume(){ super.onResume(); initView(); adapter.notifyDataSetChanged(); } @Override public void onDestroy(){ super.onDestroy(); noteManager.closeDB(); } public void initView(){ notes=noteManager.query(); adapter=new MyAdapter(this,notes); final ListView listView=(ListView)findViewById(R.id.lv); listView.setAdapter(adapter); Button btn=(Button)findViewById(R.id.newBtn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i=new Intent(MainActivity.this,AddActivity.class); startActivity(i); } }); //长按删除 listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) { final AlertDialog.Builder mDialog=new AlertDialog.Builder(MainActivity.this); mDialog.setTitle("提示!"); mDialog.setMessage("确定删除?"); mDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); noteManager.delete(notes.get(position)); notes.remove(position); adapter.notifyDataSetChanged(); } }); mDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { dialog.dismiss(); } }); mDialog.setCancelable(true); mDialog.show(); return true; } }); //单击编辑 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Intent intent = new Intent(MainActivity.this, InActivity.class); Bundle bundle = new Bundle(); bundle.putSerializable("inDetail", notes.get(position)); intent.putExtras(bundle); startActivity(intent); } }); }
详情页(InActivity.class)
public class InActivity extends AppCompatActivity { private NoteManager noteManager; private note note=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_in); noteManager=new NoteManager(this); init(); click1();//修改 click2();//保存 } //修改 private void click1(){ Button updateBtn=(Button)findViewById(R.id.upgradeBtn); updateBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText title = (EditText) findViewById(R.id.title_ined); EditText content = (EditText) findViewById(R.id.content_ined); title.setEnabled(true);//设置为可写状态 content.setEnabled(true);//设置为可写状态 title.setTextColor(Color.BLACK); content.setTextColor(Color.BLACK); } }); } //保存 private void click2(){ Button saveBtn=(Button)findViewById(R.id.save_inBtn); saveBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { updateDetail(); } }); } private void init(){ EditText title=(EditText)findViewById(R.id.title_ined); EditText time=(EditText)findViewById(R.id.time_tvin); EditText content=(EditText)findViewById(R.id.content_ined); Intent intent=this.getIntent(); note=(note)intent.getSerializableExtra("inDetail"); title.setText(note.getTitle()); content.setText(note.getContent()); title.setEnabled(false); content.setEnabled(false); time.setEnabled(false); title.setTextColor(Color.GRAY); content.setTextColor(Color.GRAY); } private void updateDetail(){ EditText title=(EditText)findViewById(R.id.title_ined); EditText content=(EditText)findViewById(R.id.content_ined); String title1=title.getText().toString(); String content1=content.getText().toString(); SimpleDateFormat format=new SimpleDateFormat("MM-dd HH:mm"); Date date=new Date(System.currentTimeMillis()); String time1=format.format(date); note note1=new note(); note1.setId(note.getId()); note1.setTitle(title1); note1.setContent(content1); note1.setTime(time1); if(noteManager.update(note1)){ Toast.makeText(this,"更改成功!",Toast.LENGTH_LONG).show(); Intent intent=new Intent(InActivity.this,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); finish(); }else{ Toast.makeText(this,"更新失败,保存不成功!",Toast.LENGTH_LONG).show(); } }
新建页(AddActivity.class)
public class AddActivity extends AppCompatActivity { private NoteManager noteManager; private SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add); noteManager=new NoteManager(this); click(); } @Override public void onDestroy() { super.onDestroy(); noteManager.closeDB(); } public void add(){ EditText ed_title=(EditText)findViewById(R.id.title_ed); EditText ed_content=(EditText)findViewById(R.id.content_ed); String title=ed_title.getText().toString().trim(); String content=ed_content.getText().toString(); SimpleDateFormat format=new SimpleDateFormat("MM-dd HH:mm"); Date date=new Date(System.currentTimeMillis()); String time=format.format(date); int id=getPreferences(); note note=new note(); note.setId(id); note.setTitle(title); note.setContent(content); note.setTime(time); if(title.equals("")||content.equals("")){ Toast.makeText(this,"请填写标题和内容",Toast.LENGTH_LONG).show(); return; } if(noteManager.insert(note)){ getIdEditor(id); Toast.makeText(this,"保存成功!",Toast.LENGTH_LONG).show(); Toast.makeText(this,"id"+id,Toast.LENGTH_LONG).show(); Intent intent=new Intent(AddActivity.this,MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent); finish(); }else{ Toast.makeText(this,"保存不成功!",Toast.LENGTH_LONG).show(); Toast.makeText(this,"id"+id,Toast.LENGTH_LONG).show(); } noteManager.closeDB();//关闭数据库 } private int getPreferences(){ sharedPreferences=getSharedPreferences("id",Context.MODE_PRIVATE); return sharedPreferences.getInt("id",1); } private int getIdEditor(int id){ SharedPreferences.Editor editor=sharedPreferences.edit(); editor.putInt("id",++id); editor.commit(); return id; } private void click(){ Button saveBtn=(Button)findViewById(R.id.saveBtn); saveBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { add(); } }); }
item布局:layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="15dp" android:layout_marginBottom="25dp" <!--下面这条语句是防止子类控件的点击事件触发而导致listview的点击事件无法触发--> android:descendantFocusability="blocksDescendants" android:orientation="horizontal"> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:id="@+id/title_view" android:layout_weight="2" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:inputType="time" android:ems="10" android:id="@+id/time_view" android:layout_weight="1" /></LinearLayout>
mainActivity的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button style="?android:attr/buttonStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/newNote" android:id="@+id/newBtn" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" /> <ListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/lv" android:layout_below="@+id/newBtn" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" tools:listitem="@android:layout/simple_list_item_1" android:divider="@android:drawable/divider_horizontal_textfield" /></RelativeLayout>
新建布局(AddActivity)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="note.mynote.AddActivity"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/title_ed" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:hint="@string/title_ed" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="textMultiLine" android:ems="10" android:id="@+id/content_ed" android:hint="@string/content_ed" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/title_ed" /> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/saveBtn" android:id="@+id/saveBtn" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" /></RelativeLayout>
详情页(InActivity)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="note.mynote.InActivity" android:id="@+id/inContent"> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/title_ined" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:hint="@string/title_ed" /> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:inputType="time" android:ems="10" android:id="@+id/time_tvin" android:layout_below="@+id/title_ined" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:visibility="invisible" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/content_ined" android:layout_below="@+id/time_tvin" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:hint="@string/content_ed" /><LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentStart="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentBottom="true"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/upgradeBtn" android:id="@+id/upgradeBtn" android:layout_weight="1" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true"/> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/saveBtn" android:id="@+id/save_inBtn" android:layout_weight="1" android:layout_alignParentBottom="true" android:layout_alignRight="@+id/editText" android:layout_alignEnd="@+id/editText" /></LinearLayout></RelativeLayout>
好了,就这样子,初学者哈,有什么不足之处请各位多多原谅以及多多指教哈。
0 1
- 简单的记事本(SQLite+自定义adapter)
- 自定义View的简单案例(3) 记事本的实现
- 自定义View 实现简单的记事本外观
- 简单记事本的实现(JAVA)
- Java的简单应用(记事本)
- 一个简单的记事本
- 简单的记事本
- 简单的Java记事本
- 一个简单的记事本
- 一个简单的记事本
- java简单的记事本
- 简单的记事本
- 简单的记事本程序
- Android 简单的记事本
- 自定义使用Adapter的组件(一)
- 自定义使用Adapter的组件(二)
- 自定义listview的显示(重写Adapter)
- 自定义Adapter的listview(很重要)
- HTML、HTML5、XHTML、XML、XSL、DTD、XML Schema 简单介绍
- safeApply angular
- 为Mac Terminal设置代理
- 学术有眼光,业界有市场之Ethernet II帧和IEEE 802.3以太网帧
- Atitit.常用分区api的attilax总结
- 简单的记事本(SQLite+自定义adapter)
- iOS替换字符串中的分号为换行符
- 第三十七篇:触摸事件
- MySql 插入(insert)性能测试
- STL容器-序列式容器vector
- user-scalable=no 控制手机版浏览器网页分辨率
- asp.net mvc + javascript生成下载文件
- 各种分类算法比较
- python 清理系统超过一个月的日志文件 和 文件 文件夹