登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 1137|回复: 4

Android实现简易记事本,android实现记事本

[复制链接]

440

主题

1104

帖子

1907

安币

手工艺人

发表于 2018-3-13 12:35:51 | 显示全部楼层 |阅读模式

            

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

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

        

        

        

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

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

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

        

[Java] 查看源文件 复制代码
<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:描述记事本列表中每个元素的各个控件

[Java] 查看源文件 复制代码
<

        note_editor.xml:编辑界面

[Java] 查看源文件 复制代码
<

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

[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 =[]{id.tostring()});
  }
  
  public static void deletenotebyid(integer id){
    if(id == null)
      return ;
    db.delete("notebook", "_id=[]{id.tostring()});
  }
  
  public static void updatenotebyid(integer id, contentvalues values){
    db.update("notebook", values, "_id=[]{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的代码如下:

[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<

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

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

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

        noteeditactivity.java

[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



        
发表于 2018-3-14 08:05:31 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

314

主题

996

帖子

701

安币

手工艺人

发表于 2018-3-15 08:40:38 | 显示全部楼层
安卓巴士是个不错的网站,我来顶个贴~

501

主题

1161

帖子

323

安币

手工艺人

发表于 2018-3-16 12:48:49 | 显示全部楼层
感谢大神~

0

主题

8

帖子

22

安币

初级码农

Rank: 1

发表于 2019-4-18 20:04:00 | 显示全部楼层
代码不全呀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表