Android Studio——记事本案例

2024-06-04 7796阅读

一、布局界面

        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();
        }
    }
}

七、运行结果截图

        主界面

Android Studio——记事本案例 第1张

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

Android Studio——记事本案例 第2张Android Studio——记事本案例 第3张

         修改界面

Android Studio——记事本案例 第4张Android Studio——记事本案例 第5张


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]