您的位置:首页 > 数据库

简单的记事本(SQLite+自定义adapter)

2015-11-04 18:44 381 查看
初学者学习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>


好了,就这样子,初学者哈,有什么不足之处请各位多多原谅以及多多指教哈。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: