Android实现简易记事本

本文实例为大家分享了Android实现简易记事本的具体代码,供大家参考,具体内容如下

此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下:

具体操作就是长按可以删除操作,点击可以进行修改,点击添加笔记按钮可以添加一个笔记。

首先我们需要三个界面样式一个是我们的进入程序时的第一个界面,然后第一个界面里面有一个ListView,这个ListView需要一个xml来描述里面的各个元素,这也是第二个。还有一个就是我们的编辑页面的界面。
三个xml描述文件如下:

activity_main.xml:进入程序的第一个界面

<LinearLayout 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:orientation="vertical"
  tools:context=".MainActivity" >

  <TextView
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"
    android:text="记事本列表"
    android:textSize="20sp"
    android:paddingTop="10dp"
    android:paddingBottom="5dp"
    android:gravity="center"/> 

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="1" > 

    <ListView
      android:id="@+id/listNote"
      android:layout_margin="5dp"
      android:layout_width="match_parent"
      android:layout_height="wrap_content" >
    </ListView>
  </LinearLayout> 

  <Button
    android:id="@+id/addNote"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp"
    android:text="添加笔记"
    android:textSize="20sp" /> 

</LinearLayout>

note_item.xml:描述记事本列表中每个元素的各个控件

<?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:orientation="vertical" >

  <TextView
    android:id="@+id/noteTitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:singleLine="true"
    android:text=""
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <TextView
    android:id="@+id/noteCreateTime"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:text="" />

</LinearLayout>

note_editor.xml:编辑界面

<?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:orientation="vertical" >

  <TextView
    android:id="@+id/noteId"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=""/>

  <EditText
    android:id="@+id/title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="输入标题">
    <requestFocus />
  </EditText>

  <EditText
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:hint="输入内容"
    android:gravity="left">
  </EditText>

  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="center"
    android:gravity="center">

    <Button
    android:id="@+id/save"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp"
    android:text="保存"
    android:textSize="20sp" /> 

    <Button
    android:id="@+id/cancel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginBottom="10dp"
    android:text="取消"
    android:textSize="20sp" />
  </LinearLayout>

</LinearLayout>

现在我们可以考虑我们底层的数据库的操作了,这里有一个类专门用于与数据库打交道,如下:
DBService.java

public class DBService {

  private static SQLiteDatabase db = null;

  static {
    //新建或者打开db
    db = SQLiteDatabase.openOrCreateDatabase("data/data/cn.lger.notebook/NoteBook.db", null);

    String sql = "create table NoteBook(_id integer primary key autoincrement,title varchar(255),content TEXT, createTime varchar(25))";

    //判断是否存在表NoteBook,如果不存在会抛出异常,捕捉异常后创建表
    try{
      db.rawQuery("select count(1) from NoteBook ",null);
    }catch(Exception e){
      db.execSQL(sql);
    }
  }

  public static SQLiteDatabase getSQLiteDatabase(){
    return db;
  }

  public static Cursor queryAll(){
    return db.rawQuery("select * from NoteBook ",null);
  }

  public static Cursor queryNoteById(Integer id){
    return db.rawQuery("select * from NoteBook where _id =?",new String[]{id.toString()});
  }

  public static void deleteNoteById(Integer id){
    if(id == null)
      return ;
    db.delete("NoteBook", "_id=?", new String[]{id.toString()});
  }

  public static void updateNoteById(Integer id, ContentValues values){
    db.update("NoteBook", values, "_id=?", new String[]{id.toString()});
  }

  /**
   * 添加一个笔记,并且记录当前添加的时间
   * @param values 表中的各个字段值
   */
  public static void addNote(ContentValues values){
    values.put("createTime", DateFormat.format("yyyy-MM-dd kk:mm:ss", System.currentTimeMillis()).toString());
    db.insert("NoteBook", null, values);
  }
}

下面我们在进入第一个界面的时候需要访问数据库并且将数据的值不断的更新(比如进行了删除操作的时候或者添加操作之后需要刷新),这样,我们就可能需要重写Activity的onResume(),这样就可以调用Cursor的requery()来刷新我们列表中ListView的结果。还有我们需要长按删除,点击修改,添加笔记这些都需要监听事件,因此,这里还要设置监听
具体MainActivity.java的代码如下:

public class MainActivity extends Activity {
  private Cursor listItemCursor = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 设置添加笔记按钮事件,切换activity
    this.findViewById(R.id.addNote).setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View arg0) {
            Intent in = new Intent();
            in.setClassName(getApplicationContext(),
                "cn.lger.notebook.NoteEditActivity");
            startActivity(in);
          }
        });

    // 查询所有笔记,并将笔记展示出来
    listItemCursor = DBService.queryAll();
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(MainActivity.this,
        R.layout.note_item, listItemCursor, new String[] { "_id",
            "title", "createTime" }, new int[] { R.id.noteId,
            R.id.noteTitle, R.id.noteCreateTime },
        CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
    ((ListView) this.findViewById(R.id.listNote)).setAdapter(adapter);

    initListNoteListener();

  }

  /**
   * 初始化笔记列表的长按和点击事件
   */
  private void initListNoteListener() {
    // 长按删除
    ((ListView) this.findViewById(R.id.listNote))
        .setOnItemLongClickListener(new OnItemLongClickListener() {

          @Override
          public boolean onItemLongClick(AdapterView<?> parent,
              View view, int position, final long id) {
            new AlertDialog.Builder(MainActivity.this)
                .setTitle("提示框")
                .setMessage("确认删除该笔记??")
                .setPositiveButton("确定",
                    new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface arg0,int arg1) {
                        DBService.deleteNoteById((int) id);
                        //删除后刷新列表
                        MainActivity.this.onResume();
                        Toast.makeText(
                            MainActivity.this,
                            "删除成功!!",
                            Toast.LENGTH_LONG)
                            .show();
                      }
                    }).setNegativeButton("取消", null).show();
            return false;
          }
        });

    //点击进行修改操作
    ((ListView) this.findViewById(R.id.listNote))
        .setOnItemClickListener(new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
              int position, long id) {
            Intent in = new Intent();
            in.setClassName(view.getContext(),
                "cn.lger.notebook.NoteEditActivity");
            // 将id数据放置到Intent,切换视图后可以将数据传递过去
            in.putExtra("id", id);
            startActivity(in);
          }
        });

  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

  /**
   * 当从另一个视图进入该视图会调用该方法
   */
  @Override
  protected void onResume() {
    super.onResume();
    // 要求刷新主页列表笔记
    if (listItemCursor != null) {
      listItemCursor.requery();
    }
  }
}

上面的代码中还涉及到了一个视图切换后的传递信息的操作,就是通过Intent的putExtra(key, value)这样可以在切换后的视图中调用函数getIntent().get~Extra(key, replace);来接收传递的数据。

下面是我们的编辑界面中对应的具体实现代码,这里有判断是使用更新操作还是添加操作,主要是判断MainActivity.java有没有传递过来id,如果有就是通过这个id来更新操作,没有就是添加操作。

编辑界面对应的具体实现代码如下:

NoteEditActivity.java

public class NoteEditActivity extends Activity {

  private EditText titleEditText = null;
  private EditText contentEditText = null;
  private String noteId = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.note_editor);

    titleEditText = (EditText) NoteEditActivity.this
        .findViewById(R.id.title);
    contentEditText = (EditText) NoteEditActivity.this
        .findViewById(R.id.content);

    initNoteEditValue();

    //取消按钮监听
    this.findViewById(R.id.cancel).setOnClickListener(
        new OnClickListener() {
          @Override
          public void onClick(View arg0) {
            NoteEditActivity.this.finish();
          }
        });

    this.findViewById(R.id.save).setOnClickListener(new OnClickListener() {
      @Override
      public void onClick(View arg0) {

        final String title = titleEditText.getText().toString();
        final String content = contentEditText.getText().toString();

        //判断标题和内容是否为空,不为空才能保存
        if ("".equals(title) || "".equals(content)) {
          Toast.makeText(NoteEditActivity.this, "标题或者内容不能为空",
              Toast.LENGTH_LONG).show();
          return;
        }

        //提示保存
        new AlertDialog.Builder(NoteEditActivity.this)
            .setTitle("提示框")
            .setMessage("确定保存笔记吗??")
            .setPositiveButton("确定",
                new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface arg0,
                      int arg1) {
                    ContentValues values = new ContentValues();
                    values.put("title", title);
                    values.put("content", content);

                    //如果noteId不为空那么就是更新操作,为空就是添加操作
                    if (null == noteId || "".equals(noteId))
                      DBService.addNote(values);
                    else
                      DBService.updateNoteById(
                          Integer.valueOf(noteId),
                          values);
                    //结束当前activity
                    NoteEditActivity.this.finish();
                    Toast.makeText(NoteEditActivity.this, "保存成功!!",
                        Toast.LENGTH_LONG).show();
                  }
                }).setNegativeButton("取消", null).show();

      }
    });
  }

  /**
   * 初始化编辑页面的值(如果进入该页面时存在一个id的话),比如标题,内容。
   */
  private void initNoteEditValue() {
    // 从Intent中获取id的值
    long id = this.getIntent().getLongExtra("id", -1L);
    // 如果有传入id那么id!=-1
    if (id != -1L) {
      // 使用noteId保存id
      noteId = String.valueOf(id);
      // 查询该id的笔记
      Cursor cursor = DBService.queryNoteById((int) id);
      if (cursor.moveToFirst()) {
        // 将内容提取出来
        titleEditText.setText(cursor.getString(1));
        contentEditText.setText(cursor.getString(2));
      }
    }
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }
}

以上就将我们的安卓简易记事本完成了,源码已经上传GitHub

界面采用了拿来主义,可以参考下面文章

android实现记事本app

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android记事本项目开发

    写了一个Android记事本小程序,现在记录一下. 考虑到是记事本小程序,记录的内容只有文字,而且内容不会太长,所以选择使用SQLite数据库,数据存放在用户的手机上. 牵涉到数据库,那自然是一个实体.先设计实体数据表:DBHelper.java package com.ikok.notepad.DBUtil; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android

  • Android+SQLite数据库实现的生词记事本功能实例

    本文实例讲述了Android+SQLite数据库实现的生词记事本功能.分享给大家供大家参考,具体如下: 主activity命名为 Dict: 代码如下: package example.com.myapplication; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase;

  • Android实现记事本功能(26)

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 MainActivity.java代码: package siso.smartnotef.activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.support.

  • Android实现记事本功能

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 实现功能 1.文本数据的存储 2.图片数据存储 3.视频数据存储 4.自定义的Adapter 5.SQlite的创建 6.数据listview列表的显示 demo地址 记事本 界面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android中实现记事本动态添加行效果

    本文主要给大家介绍了关于Android实现记事本动态添加行的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 先看效果图: 这是昨天在群里面有人在问这个问题,在这里顺便记录一下,这个效果我们可以自定义EditText,实现起来也不难 看详细步骤: 第一:初始化Paint,这里肯定要用到画笔的 this.paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(getResources().getCo

  • android实现记事本app

    自己写的一个简单的记事本app,效果如下: 一.首先是第一个界面的编写,最上面是一个TextView,中间是一个Linearlayout中嵌套一个listview布局,最下面是一个button.下面附上第一个页面的简单布局xml文件. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" androi

  • Android实现简易记事本

    本文实例为大家分享了Android实现简易记事本的具体代码,供大家参考,具体内容如下 此次做的Android简易记事本的存储方式使用了SQLite数据库,然后界面的实现比较简单,但是,具有增删改查的基本功能,这里可以看一下效果图,如下: 具体操作就是长按可以删除操作,点击可以进行修改,点击添加笔记按钮可以添加一个笔记. 首先我们需要三个界面样式一个是我们的进入程序时的第一个界面,然后第一个界面里面有一个ListView,这个ListView需要一个xml来描述里面的各个元素,这也是第二个.还有一

  • Android实现简易登陆注册逻辑的实例代码

    大家好,今天给大家带来Android制作登录和注册功能的实现,当我们面临制作登录和注册功能的实现时,我们需要先设计登录界面的布局和注册界面的布局,做到有完整的思路时才开始实现其功能效果会更好. activity_login <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http

  • Java实现的简易记事本

    本文实例讲述了Java实现的简易记事本.分享给大家供大家参考.具体如下: 感觉这个没有自己以前用Windows API写的好看了... JDK Version : 1.7.0 效果如下图所示: 源代码如下: import java.io.*; import java.awt.*; import java.awt.event.*; /** * The Main Window * @author Neo Smith */ class PadFrame extends Frame { private

  • Java图形界面开发之简易记事本

    在学习了Java事件之后,自己写了一个极其简单的记事本.用到了MenuBar,Menu,MenuITem等控件,事件包括ActionListener以及KeyListener. 代码如下: package com.package3; /* * 功能:简易记事本的开发,可以保存文件,打开文件,退出记事本 * author:ywq */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*

  • Android编程简易实现XML解析的方法详解

    本文实例讲述了Android编程简易实现XML解析的方法.分享给大家供大家参考,具体如下: 首先创建在Android工程中创建一个Assets文件夹 app/src/main/assets 在这里添加一个名为 data.xml的文件,然后编辑这个文件,加入如下XML格式内容 <?xml version="1.0" encoding="utf-8"?> <apps> <app> <id>1</id> <

  • Android实现简易计步器功能隔天步数清零查看历史运动纪录

    最近需要用到计步功能,这可难坏我了,iOS端倒好,有自带的计步功能,让我惊讶的是连已爬楼层都给做好了,只需要调接口便可获得数据,我有一句MMP,我很想讲. 但是抱怨归抱怨,功能还是得事先的去实现,微信运动,乐动力,都还不错,尤其是乐动力的计步功能真的非常的强大,在UI域用户与用户交互也做得非常棒,党来内需当连续运动十步后开始计步.本想着去找他们实现的算法然后拿来用,但很明显这是不可能的.后来我搜了很多资料发现,在Android4.4 Kitkat 新增的STEP DETECTOR 以及 STEP

  • Android实现简易版打地鼠

    本文实例为大家分享了Android实现简易版打地鼠的具体代码,供大家参考,具体内容如下 目标效果: 1.activity_main.xml页面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schema

  • Android实现简易计算器小程序

    本文实例为大家分享了Android实现简易计算器小程序的具体代码,供大家参考,具体内容如下 目标效果: 通过编写代码,可以实现整数和小数的加减乘除运算,以及删除和清空的功能. 1.页面中Button使用的是线性布局,最外边一个是父布局,第一行C,DEL,/,*为第一个子布局,第二行7,8,9,-为第二个子布局,第三行4,5,6,+为第三个子布局,第四五行为第四个子布局,第四个子布局中还有两个相当于是孙布局的级别,1,2,3为第一个孙布局,0和.为第二个孙布局,=在两个孙布局之外第四个子布局以内.

  • android实现简易计算器

    本文实例为大家分享了android实现简易计算器展示的具体代码,供大家参考,具体内容如下 效果图: 一.如图,首先布局计算器主页显示 activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width=&quo

  • Android 超简易Zxing框架 生成二维码+扫码功能

    zxing是一个二维码的框架. 配置 1. implementation 'com.journeyapps:zxing-android-embedded:4.1.0' 如果报错在这个文件的android下加上如下配置,让其支持Java1.8,不然只有1.7.1.6 (可在'app'右键---->open module settings------>Module看到) compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 tar

随机推荐