简单的记事本(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
原创粉丝点击