小工具知识网

当前位置: 首页 > 行业知识 > Android Studio——记事本案例

行业知识

Android Studio——记事本案例

2026-11-04 07:45:52 来源:互联网转载

一、布局界面

        1、记事本界面布局

main_notepad.xml

                

        2、记事本Item布局界面

activity_item.xml

        

        3、添加、修改界面布局

activity_record.xml

                                                                                                            

二、封装记录信息实体类

        记事本的每个记录都会有记录内容和记录时间这两个属性,因此需要建立一个实体类用于存放这些属性。

NotepadBean.java

public class NotepadBean {    private String id;    private String notepadContent;    private String notepadTime;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getNotepadContent() {        return notepadContent;    }    public void setNotepadContent(String notepadContent) {        this.notepadContent = notepadContent;    }    public String getNotepadTime() {        return notepadTime;    }    public void setNotepadTime(String notepadTime) {        this.notepadTime = notepadTime;    }}

三、编写记事本界面列表适配器

        因为记事本的纪录列表是使用ListView控件展示的,因此需要建立一个数据适配器对ListView控件进行数据适配。

NotepadAdapter.java

public class NotepadAdapter extends BaseAdapter {    private LayoutInflater layoutInflater;    private List list;    public NotepadAdapter(Context context, List list){                this.layoutInflater=LayoutInflater.from(context);        this.list=list;    }    @Override    //获取Item条目的总数    public int getCount(){        return list==null? 0: list.size();    }    @Override    //根据position(位置)获取某个Item的对象    public Object getItem(int position){        return list.get(position);    }    @Override    //根据position(位置)获取某个Item的id    public long getItemId(int position){        return position;    }    @Override    //获取相应position对应的Item视图,position是当前Item的位置,convertView用于复用旧视图,parent用于加载xml布局    public View getView(int position, View convertView, ViewGroup parent){        ViewHolder viewHolder;        //通过inflate()方法加载Item布局,并将获取的数据显示到对应的控件上,并判断旧视图是否为空,若为空,则创建一个ViewHolder对象        //通过set.Tag()方法将该对象添加到convertView中进行缓存,否则把获取的旧视图进行缓存        if(convertView==null){            convertView=layoutInflater.inflate(R.layout.activity_item,null);            viewHolder=new ViewHolder(convertView);            convertView.setTag(viewHolder);        }        else{            viewHolder=(ViewHolder) convertView.getTag();        }        NotepadBean noteInfo=(NotepadBean) getItem(position);        viewHolder.tvNoteoadContent.setText(noteInfo.getNotepadContent());        viewHolder.tvNotepadTime.setText(noteInfo.getNotepadTime());        return convertView;    }    class ViewHolder{        TextView tvNoteoadContent;        TextView tvNotepadTime;        public ViewHolder(View view){            tvNoteoadContent=(TextView) view.findViewById(R.id.ietm_content);            tvNotepadTime=(TextView) view.findViewById((R.id.item_time));        }    }}

四、创建数据库

        因为记事本的存储和读取记录的数据都是通过数据库完成的,因此需要创建数据库

        1、先创建一个DBUtils类,在该类中定义数据库的名称、表名、数据库版本、数据库表中的列名以及获取当前日期等信息。

DBUtils.java

public class DBUtils {    public static final String DATABASE_NAME="Notepad";    public static final String DATABASE_TABLE="Note";    public static final int DATABASE_VERSION=1;    //数据库表中的列名    public static final String NOTEPAD_ID="id";    public static  final String NOTEPAD_CONTENT="content";    public static final String NOTEPAD_TIME="notetime";    //获取当前日期    public static final String getTime(){        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日HH:mm;ss");        Date date=new Date(System.currentTimeMillis());        return simpleDateFormat.format(date);    }}

        2、创建SQLiteHelper类,在该类中实现增删改查操作

SQLiteHelper.java

public class SQLiteHelper extends SQLiteOpenHelper {    private SQLiteDatabase sqLiteDatabase;    //创建数据库    public SQLiteHelper(Context context){        super(context, DBUtils.DATABASE_NAME,null,DBUtils.DATABASE_VERSION);        sqLiteDatabase=this.getWritableDatabase();    }    //创建表    @Override    public void onCreate(SQLiteDatabase db){        db.execSQL("create table "+DBUtils.DATABASE_TABLE+"("+DBUtils.NOTEPAD_ID+" integer primary key autoincrement,"+DBUtils.NOTEPAD_CONTENT+" text,"+DBUtils.NOTEPAD_TIME+ " text)");    }    @Override    public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){}    //添加数据    public boolean insertData(String userContent,String userTime){        ContentValues contentValues=new ContentValues();        contentValues.put(DBUtils.NOTEPAD_CONTENT,userContent);        contentValues.put(DBUtils.NOTEPAD_TIME,userTime);        return sqLiteDatabase.insert(DBUtils.DATABASE_TABLE,null,contentValues)>0;    }    //删除数据    public boolean deleteData(String id){        String sql=DBUtils.NOTEPAD_ID+"=?";        String [] contentValuesArray=new String[]{String.valueOf(id)};        return sqLiteDatabase.delete(DBUtils.DATABASE_TABLE,sql,contentValuesArray)>0;    }    //修改数据    public boolean updateData(String id,String content,String userYear){        ContentValues contentValues=new ContentValues();        contentValues.put(DBUtils.NOTEPAD_CONTENT,content);        contentValues.put(DBUtils.NOTEPAD_TIME,userYear);        String sql=DBUtils.NOTEPAD_ID+"=?";        String [] strings=new String[] {id};        return sqLiteDatabase.update(DBUtils.DATABASE_TABLE,contentValues,sql,strings)>0;    }    //查询数据    public List query(){        List list =new ArrayList();        Cursor cursor=sqLiteDatabase.query(DBUtils.DATABASE_TABLE,null,null,null,null,null,DBUtils.NOTEPAD_ID+" desc");        if(cursor!=null){            while(cursor.moveToNext()){                NotepadBean noteInfo=new NotepadBean();                @SuppressLint("range")                String id=String.valueOf(cursor.getInt(cursor.getColumnIndex(DBUtils.NOTEPAD_ID)));                @SuppressLint("range")                String content=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_CONTENT));                @SuppressLint("range")                String time=cursor.getString(cursor.getColumnIndex(DBUtils.NOTEPAD_TIME));                noteInfo.setId(id);                noteInfo.setNotepadContent(content);                noteInfo.setNotepadTime(time);                list.add(noteInfo);            }            cursor.close();        }        return list;    }}

五、实现添加记录界面功能

        因为添加记录界面有保存和删除按钮,因此创建记录类实现点击事件,将编写的内容添加到数据库中。

RecordActivity.java

public class RecordActivity extends AppCompatActivity implements View.OnClickListener{    ImageView delete,note_save,note_back;    TextView noteName,note_time;    EditText content;    SQLiteHelper mSQLiteHelper;    String id;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_record);        //通过findViewById获取界面控件        note_back=(ImageView) findViewById(R.id.note_back);        note_save=(ImageView) findViewById(R.id.note_save);        delete=(ImageView) findViewById(R.id.delete);        noteName=(TextView) findViewById(R.id.note_name);        note_time=(TextView) findViewById(R.id.tv_time);        content=(EditText) findViewById(R.id.note_content);        //设置启动器        note_back.setOnClickListener(this);        delete.setOnClickListener(this);        note_save.setOnClickListener(this);        //初始化        initData();    }    protected void initData(){        //创建数据库        mSQLiteHelper=new SQLiteHelper(this);        noteName.setText("添加记录");        //接收记事本传来的消息        //getIntent()方法获取Intent对象        Intent intent=getIntent();        if(intent!=null){            //获取传递的记录id            id=intent.getStringExtra("id");            if(id!=null){                noteName.setText("修改记录");                content.setText(intent.getStringExtra("content"));                note_time.setText(intent.getStringExtra("time"));                note_time.setVisibility(View.VISIBLE);            }        }    }    public void onClick(View v){        switch (v.getId()){            //后退,删除,保存事件            case R.id.note_back:                finish();                break;            case R.id.delete:                content.setText("");                break;            case R.id.note_save:                //通过getText()获取输入内容                String noteContent=content.getText().toString().trim();                if(id!=null){                    if(noteContent.length()>0){                        if(mSQLiteHelper.updateData(id,noteContent,DBUtils.getTime())){                            showToast("修改成功");                            setResult(2);                            finish();                        }                        else{                            showToast("保存失败");                        }                    }                    else{                        showToast("保存内容不能为空");                    }                }             //向数据库添加数据                else{                    if(noteContent.length()>0){                        if(mSQLiteHelper.insertData(noteContent,DBUtils.getTime())){                            showToast("保存成功");                            setResult(2);                            finish();                        }                        else{                            showToast("保存失败");                        }                    }                    else{                        showToast("修改内容不能为空");                    }                }                break;            }    }    public void showToast(String Message){        Toast.makeText(RecordActivity.this,Message,Toast.LENGTH_SHORT).show();    }}

六、实现记事本界面的显示功能

        等于就是刚进入程序的界面的选择与操作

MainActivity.java

public class MainActivity extends Activity {    ListView listView;    List list;    SQLiteHelper mSQLiteHelper;    NotepadAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_notepad);        //用于显示记录的列表        listView=(ListView) findViewById(R.id.listview);        ImageView add=(ImageView) findViewById(R.id.add);        //设置添加按钮事件        add.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //使用显示Intent指定要跳转的目标Activity,并通过startActivityForResult()方法开启目标Activity                Intent intent=new Intent(MainActivity.this,RecordActivity.class);                startActivityForResult(intent,1);            }        });        initData();    }    protected void initData() {        //创建数据库        mSQLiteHelper = new SQLiteHelper(this);        showQueryData();        //处理查看记事本详细信息        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView parent, View view, int position, long id) {                //通过get方法获取对应的Item数据                NotepadBean notepadBean=list.get(position);                //通过putExtra()方法封装到Intent对象中                Intent intent=new Intent(MainActivity.this,RecordActivity.class);                intent.putExtra("id",notepadBean.getId());                intent.putExtra("time",notepadBean.getNotepadTime());                intent.putExtra("content",notepadBean.getNotepadContent());                MainActivity.this.startActivityForResult(intent,1);            }        });        //删除记事本记录        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {            @Override            public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {                AlertDialog dialog;                AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this)                        .setMessage("是否删除此纪录?")                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                //获取Item对象                                NotepadBean notepadBean=list.get(position);                                if(mSQLiteHelper.deleteData(notepadBean.getId())){                                    //删除对应的Item                                    list.remove(position);                                    //更新记事本界面                                    adapter.notifyDataSetChanged();                                    Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();                                }                            }                        })                        .setPositiveButton("取消", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                dialog.dismiss();                            }                        });                dialog=builder.create();                dialog.show();                return true;            }        });    }    private void showQueryData(){        if(list!=null){            list.clear();        }        //从数据库中查询数据        list=mSQLiteHelper.query();        adapter=new NotepadAdapter(this,list);        listView.setAdapter(adapter);    }    @Override    //重写,当关闭添加记录界面时,程序回调该方法    // 并在该方法中调用showQueryData()方法重新获取数据库中保存的记录数据并显示到记录列表中    protected void onActivityResult(int requestCode,int resultCode,Intent data){        super.onActivityResult(requestCode,resultCode,data);        if(requestCode==1&&resultCode==2){            showQueryData();        }    }}

七、运行结果截图

        主界面

         选择添加按钮之后进入编写界面

         修改界面

上一篇:轻松掌握微信分享网站源码秘籍,源码分享攻略助你快速上手!

下一篇:宝塔面板数据库登录全攻略,轻松上手数据库操作!