写在前面

课程作业需要,于是忙活好几天抄了一个简单的记事本,使用已学内容包括Android UI布局,Activity的跳转,SQLite数据库。

开发环境:Android Studio

参考:https://blog.csdn.net/zouguo1211/article/details/83474845

源码链接:https://github.com/zsy0216/Notepad


目录

写在前面

一.界面预览

二.基本实现


一.界面预览

  • 主界面

  • 编辑界面

  • 长按删除

二.基本实现

  • 布局实现代码

初始界面功能,最上方标题下为用户创建的各条记录,点击进行修改,长按删除,最下方有添加笔记按钮进行笔记的增加操作。实现的布局文件有初始界面activity_main.xml(里面包含可以以列表的形式展示数据内容的ListView控件)、note_item(ListView对应的item布局,以显示每个条目信息)、note_editor(新建文本编辑界面)、activity_show(文本修改界面)

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>                                    

note_item.xml

<?xml version="1.0" encoding="utf-8"?>            

note_editor.xml

<?xml version="1.0" encoding="utf-8"?>                                    

activity_show.xml

<?xml version="1.0" encoding="utf-8"?>                                    
  • 功能实现

首先SQLite数据库的创建。新建一个DBService类继承自SQLiteOpenHelper,设置静态常量属性,表名、id、标题、内容、创建时间。

DBService.java

package zut.edu.cn.notepad;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class DBService extends SQLiteOpenHelper {    public static final String TABLE = "notes";    public static final String ID = "_id";    public static final String TITLE ="title";    public static final String CONTENT = "content";    public static final String TIME = "time";    public DBService(Context context) {        super(context,"notepad.db",null,1);    }    @Override    public void onCreate(SQLiteDatabase db) {        String sql = "CREATE TABLE "+TABLE+"( "+ID+                " INTEGER PRIMARY KEY AUTOINCREMENT, "+                TITLE +" VARCHAR(30) ,"+                CONTENT + " TEXT , "+                TIME + " DATETIME NOT NULL )";        db.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

MainActivity.java

package zut.edu.cn.notepad;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.ListView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    DBService myDb;    private Button mBtnAdd;    private ListView lv_note;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //实例化自己创建的数据库类        myDb = new DBService(this);        //初始化函数        init();    }        public void init(){                mBtnAdd = findViewById(R.id.btn_add);        lv_note = findViewById(R.id.lv_note);        //创建Values类型的list保存数据库中的数据        List valuesList = new ArrayList<>();        //获得可读SQLiteDatabase对象        SQLiteDatabase db = myDb.getReadableDatabase();        //查询数据库中的数据        Cursor cursor = db.query(DBService.TABLE,null,null,        null,null,null,null);        if(cursor.moveToFirst()){            Values values;            while (!cursor.isAfterLast()){                //实例化values对象                values = new Values();                //把数据库中的一个表中的数据赋值给values                values.setId(Integer.valueOf(cursor.getString(cursor.getColumnIndex(DBService.ID))));                values.setTitle(cursor.getString(cursor.getColumnIndex(DBService.TITLE)));                values.setContent(cursor.getString(cursor.getColumnIndex(DBService.CONTENT)));                values.setTime(cursor.getString(cursor.getColumnIndex(DBService.TIME)));                //将values对象存入list对象数组中                valuesList.add(values);                cursor.moveToNext();            }        }        cursor.close();        db.close();        //设置list组件adapter        final MyBaseAdapter myBaseAdapter = new MyBaseAdapter(valuesList,this,R.layout.note_item);        lv_note.setAdapter(myBaseAdapter);        //按钮点击事件        mBtnAdd.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(MainActivity.this, zut.edu.cn.notepad.EditActivity.class);                startActivity(intent);            }        });        //单击查询        lv_note.setOnItemClickListener(new AdapterView.OnItemClickListener(){            @Override            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {                Intent intent = new Intent(MainActivity.this,ShowActivity.class);                Values values = (Values) lv_note.getItemAtPosition(position);                intent.putExtra(DBService.TITLE,values.getTitle().trim());                intent.putExtra(DBService.CONTENT,values.getContent().trim());                intent.putExtra(DBService.TIME,values.getTime().trim());                intent.putExtra(DBService.ID,values.getId().toString().trim());                startActivity(intent);            }        });        //长按删除        lv_note.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {                final Values values = (Values) lv_note.getItemAtPosition(position);                new AlertDialog.Builder(MainActivity.this)                        .setTitle("提示框")                        .setMessage("是否删除?")                        .setPositiveButton("yes",                                new DialogInterface.OnClickListener() {                                    @Override                                    public void onClick(DialogInterface dialog, int which) {                                        SQLiteDatabase db = myDb.getWritableDatabase();                                        db.delete(DBService.TABLE,DBService.ID+"=?",new String[]{String.valueOf(values.getId())});                                        db.close();                                        myBaseAdapter.removeItem(position);                                        lv_note.post(new Runnable() {                                            @Override                                            public void run() {                                                myBaseAdapter.notifyDataSetChanged();                                            }                                        });                                        //MainActivity.this.onResume();                                    }                                })                        .setNegativeButton("no",null).show();                return true;            }        });    }//创建继承自BaseAdapter的实现类进行ListView的展示    class MyBaseAdapter extends BaseAdapter{        private List valuesList;        private Context context;        private int layoutId;        public MyBaseAdapter(List valuesList, Context context, int layoutId) {            this.valuesList = valuesList;            this.context = context;            this.layoutId = layoutId;        }        @Override        public int getCount() {            if (valuesList != null && valuesList.size() > 0)                return valuesList.size();            else                return 0;        }        @Override        public Object getItem(int position) {            if (valuesList != null && valuesList.size() > 0)                return valuesList.get(position);            else                return null;        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            ViewHolder viewHolder;            if (convertView == null) {                convertView = LayoutInflater.from(                        getApplicationContext()).inflate(R.layout.note_item, parent,                        false);                viewHolder = new ViewHolder();                viewHolder.title = (TextView) convertView.findViewById(R.id.tv_title);                viewHolder.content = convertView.findViewById(R.id.tv_content);                viewHolder.time = (TextView) convertView.findViewById(R.id.tv_time);                convertView.setTag(viewHolder);            } else {                viewHolder = (ViewHolder) convertView.getTag();            }            String title = valuesList.get(position).getTitle();            String content = valuesList.get(position).getContent();            viewHolder.title.setText(title);            viewHolder.content.setText(content);            viewHolder.time.setText(valuesList.get(position).getTime());            return convertView;        }        public void removeItem(int position){            this.valuesList.remove(position);        }    }    class ViewHolder{        TextView title;        TextView content;        TextView time;    }}

Values.java

Values类实现对数据的保存

package zut.edu.cn.notepad;public class Values {    private Integer id;    private String title;    private String content;    private String time;    public Integer getId() {        return id;    }    public void setId(Integer id) {        this.id = id;    }    public String getTitle() {        return title;    }    public void setTitle(String title) {        this.title = title;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    public String getTime() {        return time;    }    public void setTime(String time) {        this.time = time;    }    @Override    public String toString() {        return "Values{" +                "id=" + id +                ", title='" + title + '\'' +                ", content='" + content + '\'' +                ", time='" + time + '\'' +                '}';    }}

Edit_Activity.java

package zut.edu.cn.notepad;import android.content.ContentValues;import android.content.Intent;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.text.SimpleDateFormat;import java.util.Date;public class EditActivity extends AppCompatActivity {    DBService myDb;    private Button btnCancel;    private Button btnSave;    private EditText titleEditText;    private EditText contentEditText;    private TextView timeTextView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.note_editor);        init();        if(timeTextView.getText().length()==0)            timeTextView.setText(getTime());    }    private void init() {        myDb = new DBService(this);        SQLiteDatabase db = myDb.getReadableDatabase();        titleEditText = findViewById(R.id.et_title);        contentEditText = findViewById(R.id.et_content);        timeTextView = findViewById(R.id.edit_time);        btnCancel = findViewById(R.id.btn_cancel);        btnSave = findViewById(R.id.btn_save);        //按钮点击事件        btnCancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Intent intent = new Intent(EditActivity.this,MainActivity.class);                startActivity(intent);            }        });        btnSave.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SQLiteDatabase db = myDb.getWritableDatabase();                ContentValues values = new ContentValues();                String title= titleEditText.getText().toString();                String content=contentEditText.getText().toString();                String time= timeTextView.getText().toString();               if("".equals(titleEditText.getText().toString())){                    Toast.makeText(EditActivity.this,"标题不能为空",Toast.LENGTH_LONG).show();                    return;                }                if("".equals(contentEditText.getText().toString())) {                    Toast.makeText(EditActivity.this,"内容不能为空",Toast.LENGTH_LONG).show();                    return;                }                values.put(DBService.TITLE,title);                values.put(DBService.CONTENT,content);                values.put(DBService.TIME,time);                db.insert(DBService.TABLE,null,values);                Toast.makeText(EditActivity.this,"保存成功",Toast.LENGTH_LONG).show();                Intent intent = new Intent(EditActivity.this,MainActivity.class);                startActivity(intent);                db.close();            }        });    }    //获取当前时间    private String getTime() {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        Date date = new Date(System.currentTimeMillis());        String str = sdf.format(date);        return str;    }}

ShowActivity

package zut.edu.cn.notepad;import android.annotation.SuppressLint;import android.content.ContentValues;import android.content.DialogInterface;import android.content.Intent;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.text.SimpleDateFormat;import java.util.Date;public class ShowActivity extends AppCompatActivity {    private Button btnSave;    private Button btnCancel;    private TextView showTime;    private EditText showContent;    private EditText showTitle;    private Values value;    DBService myDb;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_show);        init();    }    public void init() {        myDb = new DBService(this);        btnCancel = findViewById(R.id.show_cancel);        btnSave = findViewById(R.id.show_save);        showTime = findViewById(R.id.show_time);        showTitle = findViewById(R.id.show_title);        showContent = findViewById(R.id.show_content);        Intent intent = this.getIntent();        if (intent != null) {            value = new Values();            value.setTime(intent.getStringExtra(DBService.TIME));            value.setTitle(intent.getStringExtra(DBService.TITLE));            value.setContent(intent.getStringExtra(DBService.CONTENT));            value.setId(Integer.valueOf(intent.getStringExtra(DBService.ID)));            showTime.setText(value.getTime());            showTitle.setText(value.getTitle());            showContent.setText(value.getContent());        }        //按钮点击事件        btnSave.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                SQLiteDatabase db = myDb.getWritableDatabase();                ContentValues values = new ContentValues();                String content = showContent.getText().toString();                String title = showTitle.getText().toString();                values.put(DBService.TIME, getTime());                values.put(DBService.TITLE,title);                values.put(DBService.CONTENT,content);                db.update(DBService.TABLE,values,DBService.ID+"=?",new String[]{value.getId().toString()});                Toast.makeText(ShowActivity.this,"修改成功",Toast.LENGTH_LONG).show();                db.close();                Intent intent = new Intent(ShowActivity.this,MainActivity.class);                startActivity(intent);            }        });        btnCancel.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                final String content = showContent.getText().toString();                final String title = showTitle.getText().toString();                new AlertDialog.Builder(ShowActivity.this)                        .setTitle("提示框")                        .setMessage("是否保存当前内容?")                        .setPositiveButton("yes",                                new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                SQLiteDatabase db = myDb.getWritableDatabase();                                ContentValues values = new ContentValues();                                values.put(DBService.TIME, getTime());                                values.put(DBService.TITLE,title);                                values.put(DBService.CONTENT,content);                                db.update(DBService.TABLE,values,DBService.ID+"=?",new String[]{value.getId().toString()});                                Toast.makeText(ShowActivity.this,"修改成功",Toast.LENGTH_LONG).show();                                db.close();                                Intent intent = new Intent(ShowActivity.this,MainActivity.class);                                startActivity(intent);                            }                        })                        .setNegativeButton("no",                                new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                Intent intent = new Intent(ShowActivity.this,MainActivity.class);                                startActivity(intent);                            }                        }).show();            }        });    }    String getTime() {        @SuppressLint("SimpleDateFormat")        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");        //获取当前时间        Date date = new Date(System.currentTimeMillis());        return simpleDateFormat.format(date);    }}

偷偷地写在最后

  基本实现就是以上了,还有很多地方不太完善,希望能够从一次一次的实践当中学习到更多的东西。

  曾经沧海难为水,除却巫山不是云。

源码已上传:github.Notepad

更多相关文章

  1. Android实现手势滑动(左滑和右滑)
  2. Android利用android:indeterminateDrawable来实现ProgressBar三
  3. linux公社的大了免费在线android资料
  4. Android的生命周期 Start onResume
  5. android sharedpreferences工具类
  6. TextView 加链接所有方法
  7. 《Android学习指南》目录
  8. Android(安卓)使用 MPAndroidChart 实现折线图
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. Android事件总线框架设计:EventBus3.0源码
  2. 常用控件及其属性(Button)
  3. android性能测试调试工具之dumpsys
  4. Android网络优先级及更改
  5. Android不能进行http请求,https无法抓包的
  6. Android之zip包换肤(极力推荐)
  7. android View的scrollTo,scrollBy方法详
  8. Android对话框Dialog 的一点小问题
  9. 关于用代码实现android设备的重启
  10. Android(安卓)log保存到SDCARD的方法