用Android写一个记事本软件

这篇博客介绍如何利用Android知识和SQLite数据库创建一个具备添加、修改、显示时间戳及长按删除功能的记事本应用。文章涵盖工具类、数据库创建、ListView的使用,以及UI界面的实现。

利用安卓知识写一个简单的记事本 实现添加文本,修改文本,显示文本添加的时间,以及长按文本时能够删除文本。我使用用的是安卓自带的数据库SQLite。
首先创建一个工具类

public class DBUtils1 {
    public static final String DATABASE_NAME="Notepad";//数据库名字
    public static final String DATABASE_TABLE="Note";//表的名字
    public static final int DATABASE_VERION=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 getNotepadTime(){//获取当前时间
        SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date=new Date(System.currentTimeMillis());
        return simpleDateFormat.format(date);
    }
}

创建数据库

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

因为用到listview所以要创建构造器和适配器

public class NotepadAdapter extends BaseAdapter {
    private LayoutInflater layoutInflater;
    private List<NotepadBean>list;

    public NotepadAdapter(Context context, List<NotepadBean> list) {
        this.layoutInflater = LayoutInflater.from(context);
        this.list = list;
    }

    @Override
    public int getCount() {
        return list==null?0 : list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @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.inflate(R.layout.activity_list_notepad,null);
            viewHolder=new ViewHolder(convertView);
            convertView.setTag(viewHolder);
        }else {
            viewHolder =(ViewHolder) convertView.getTag();
        }
        NotepadBean noteInfo= (NotepadBean) getItem(position);
        viewHolder.time.setText(noteInfo.getTime());
        viewHolder.text.setText(noteInfo.getText());
        return convertView;
    }
    class ViewHolder{
        TextView text;
        TextView time;
        public ViewHolder(View view){
           text = (TextView) view.findViewById(R.id.item_text);
           time = (TextView) view.findViewById(R.id.item_time);
        }
    }

}
public class NotepadBean  {
    private String time;
    private String text;
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTime() {
        return time;
    }

    public void setTime(String time) {
        this.time = time;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public NotepadBean(String time, String text) {
        this.time = time;
        this.text = text;
    }

    public NotepadBean() {
    }


}

接下来就是显示界面和添加界面的代码

public class NotepadActivity extends Activity {
    ListView listView;
    NotepadAdapter adapter;
    List<NotepadBean>list;
    SQLiteHelper sqLiteHelper;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_notepad);
       listView= (ListView) findViewById(R.id.list);
        ImageView add= (ImageView) findViewById(R.id.add);
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(NotepadActivity.this,
                        RecordActivity.class);
                startActivityForResult(intent,1);
            }
        });
        initData();
    }

    private void initData() {
        sqLiteHelper=new SQLiteHelper(this);
        showQueryData();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                NotepadBean notepadBean=list.get(position);
                Intent intent=new Intent(NotepadActivity.this,RecordActivity.class);
                intent.putExtra("id",notepadBean.getId());
                intent.putExtra("time",notepadBean.getTime());
                intent.putExtra("content",notepadBean.getText());
                NotepadActivity.this.startActivityForResult(intent, 1);
            }
        });
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
                AlertDialog dialog;
                AlertDialog.Builder builder=new AlertDialog.Builder(NotepadActivity.this)
                        .setMessage("是否删除此事件")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                NotepadBean notepadBean=list.get(position);
                                if (sqLiteHelper.deleteData(notepadBean.getId())){
                                    list.remove(position);
                                    adapter.notifyDataSetChanged();
                                    Toast.makeText(NotepadActivity.this,"删除成功",
                                            Toast.LENGTH_SHORT).show();
                                }
                            }
                        })
                        .setNegativeButton("取消", 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=sqLiteHelper.query();
           adapter = new NotepadAdapter(this, list);
           listView.setAdapter(adapter);
        }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if ( requestCode==1&&resultCode==2 ){
            showQueryData();
        }
    }
}
public class RecordActivity extends Activity implements View.OnClickListener{
    ImageView note_back;
    TextView note_time;
    EditText content;
    ImageView delete;
    ImageView note_save;
    SQLiteHelper sqLiteHelper;
    TextView notename;
    String id;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notepad);
        note_back= (ImageView) findViewById(R.id.note_back);
        note_time= (TextView) findViewById(R.id.time);
        content= (EditText) findViewById(R.id.content);
        delete= (ImageView) findViewById(R.id.remove);
        note_save= (ImageView) findViewById(R.id.keep);
        note_time= (TextView) findViewById(R.id.time);
        notename= (TextView) findViewById(R.id.note_name);
        note_save.setOnClickListener(this);
        note_back.setOnClickListener(this);
        delete.setOnClickListener(this);
        initData();

    }

    private void initData() {
        sqLiteHelper=new SQLiteHelper(this);
notename.setText("添加记录");
        Intent intent=getIntent();
        if ( intent != null ){
           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);
           }
        }
    }

    @Override
    public void onClick(View v) {
       switch (v.getId()){
           case R.id.note_back:
               finish();
               break;
           case R.id.remove:
               content.setText("");
               break;
           case R.id.keep:
               String noteContent=content.getText().toString().trim();
               if ( id!=null ){
                   if (noteContent.length()>0){
                       if ( sqLiteHelper.updateData(id,noteContent, DBUtils1.getNotepadTime()) ){
                          showToast("修改成功");
                          setResult(2);
                          finish();
                       }else {
                           showToast("修改失败");
                       }
                   }else  {
                           showToast("不能为空");
                       }
                   }else {
                       if ( noteContent.length()>0 ){
                           if ( sqLiteHelper.insertData(noteContent, DBUtils1.getNotepadTime()) ){
                               showToast("保存成功");
                               setResult(2);
                               finish();
                           }else {
                               showToast("保存失败");
                           }
                       }else {
                           showToast("不能为空");
                       }
                   }
                    break;
               }

       }


    public void showToast(String message){
        Toast.makeText(RecordActivity.this,message,Toast.LENGTH_SHORT).show();
    }
}

布局比较简单 我就不展示出来了 (修改界面和增加界面的布局用的是同一个界面 只是文本框显示的内容不一样 代码在RecordActivity 中有体现出来)

源码下载地址

https://download.youkuaiyun.com/download/Linlee11/86791113

这是一个简单的 Android Studio 记事本软件的代码实现,包括创建、保存和读取文本文件的功能: 1. 首先,在你的 Android Studio 项目中创建一个新的 Activity,命名为 MainActivity。 2. 在 activity_main.xml 文件中创建一个 EditText 控件,用于用户输入文本。 ```xml <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="match_parent" /> ``` 3. 在 MainActivity.java 文件中声明 EditText 控件,并创建保存和读取文本文件的函数。 ```java public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); } private void saveFile() { String text = editText.getText().toString(); FileOutputStream fos = null; try { // 创建一个新的文件 File file = new File(getFilesDir(), "note.txt"); fos = new FileOutputStream(file); fos.write(text.getBytes()); Toast.makeText(this, "保存成功", Toast.LENGTH_SHORT).show(); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } private void readFile() { FileInputStream fis = null; try { // 打开文件 File file = new File(getFilesDir(), "note.txt"); fis = new FileInputStream(file); byte[] data = new byte[(int) file.length()]; fis.read(data); String text = new String(data); editText.setText(text); } catch (IOException e) { e.printStackTrace(); Toast.makeText(this, "读取失败", Toast.LENGTH_SHORT).show(); } finally { try { if (fis != null) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 4. 在 MainActivity.java 文件中添加保存和读取文件的按钮,并在按钮的点击事件中调用相应的函数。 ```java public class MainActivity extends AppCompatActivity { private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText); Button saveButton = findViewById(R.id.saveButton); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { saveFile(); } }); Button readButton = findViewById(R.id.readButton); readButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { readFile(); } }); } private void saveFile() { // 保存文件的代码 } private void readFile() { // 读取文件的代码 } } ``` 5. 在 activity_main.xml 文件中添加保存和读取文件的按钮。 ```xml <Button android:id="@+id/saveButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="保存" android:layout_gravity="end" /> <Button android:id="@+id/readButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="读取" android:layout_gravity="end" /> ``` 6. 运行应用程序,在 EditText 中输入文本,然后点击保存按钮保存文件。再次运行应用程序,点击读取按钮读取文件,文本将会显示在 EditText 控件中。 这就是一个简单的 Android Studio 记事本软件的实现方式。你可以根据自己的需求进行修改和扩展。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S1om

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值