Android 开发简单记事本程序(附源码)_android简单记事本源码_bingoCoder的博客-程序员秘密

技术标签: Android记事本  Android  

    简单介绍一下功能:简单记事本只能添加文字内容,首页用ListView显示所有保存的事项和保存的时间,添加页面添加内容,点击首页的ListView可以查看内容,删除内容。

    先看一下运行效果:

先建立数据库:

package com.engineer.shizhibin.note;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class NoteDb extends SQLiteOpenHelper {
    public static final String TABLE_NAME = "notes";
    public static final String CONTENT = "content";
    public static final String ID = "_id";
    public static final String TIME = "time";
    public NoteDb(Context context) {
        super(context, "notes", null,1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String sql ="create table "+TABLE_NAME+" ( "+ID+" integer primary key AUTOINCREMENT, "+CONTENT
                +" TEXT NOT NULL, "+TIME+" TEXT NOT NULL )";
        db.execSQL(sql);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}

 

然后是MainActivity:

 

    有显示目录的ListView,和添加按钮。他们都要设置点击监听事件。点击添加 跳转到添加文字的activity 点击ListView跳转到Show Activity。

 

onResume() 在 Activity 从 Pause 状态转换到 Active 状态时被调用。在这个方法中访问SQLite数据库,通过Adapter将条目的内容和添加时间显示在ListView中。看代码:
package com.engineer.shizhibin.note;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {
   private Button mButton;
   private ListView mList;
   private Intent mIntent;
   private MyAdapter mAdapter;
   private NoteDb mNotedb;
   private Cursor cursor;
   private SQLiteDatabase dbreader;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mList = (ListView) this.findViewById(R.id.list);
        mNotedb = new NoteDb(this);
        dbreader = mNotedb.getReadableDatabase();
        mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                cursor.moveToPosition(i);
                Intent intent = new Intent(MainActivity.this,ShowContent.class);
                intent.putExtra(NoteDb.ID,cursor.getInt(cursor.getColumnIndex(NoteDb.ID)));
                intent.putExtra(NoteDb.CONTENT,cursor.getString(cursor.getColumnIndex(NoteDb.CONTENT)));
                intent.putExtra(NoteDb.TIME,cursor.getString(cursor.getColumnIndex(NoteDb.TIME)));
                startActivity(intent);
            }
        });
    }

    public void add(View v) {
        mIntent = new Intent(MainActivity.this,AddContent.class);
        startActivity(mIntent);
    }
    public void selectDb() {
        cursor = dbreader.query
                (NoteDb.TABLE_NAME,null,null,null,null,null,null);
        mAdapter = new MyAdapter(this,cursor);
        mList.setAdapter(mAdapter);
    }

    @Override
    protected void onResume() {
        super.onResume();
        selectDb();
    }
}

    为了方便程序扩展,以后有可能添加图片、视频内容 我用了自定义的Adapter 继承自BadeAdapter:

package com.engineer.shizhibin.note;

import android.content.Context;
import android.database.Cursor;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter {
    private Context mContext;
    private Cursor mCursor;
    private LinearLayout mLayout;
    public MyAdapter(Context mContext,Cursor mCursor) {
        this.mContext = mContext;
        this.mCursor = mCursor;
    }

    @Override
    public int getCount() {
        return mCursor.getCount();
    }

    @Override
    public Object getItem(int position) {
        return mCursor.getPosition();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        mLayout = (LinearLayout) inflater.inflate(R.layout.item,null);
        TextView content = (TextView) mLayout.findViewById(R.id.list_content);
        TextView time = (TextView) mLayout.findViewById(R.id.list_time);
        mCursor.moveToPosition(position);
        String dbcontext = mCursor.getString(mCursor.getColumnIndex("content"));
        String dbtime = mCursor.getString(mCursor.getColumnIndex("time"));
        content.setText(dbcontext);
        time.setText(dbtime);
        return mLayout;
    }
}

添加条目,向数据中添加数据用ContentValues以键值对的方式 非常方便:

package com.engineer.shizhibin.note;

import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Date;

public class AddContent extends AppCompatActivity {
    private EditText mEt;
    private NoteDb mDb;
    private SQLiteDatabase mSqldb;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_content);
        mEt = (EditText) this.findViewById(R.id.text);
        mDb = new NoteDb(this);
        mSqldb = mDb.getWritableDatabase();
    }
    public void save(View v) {
        DbAdd();
        finish();
    }
    public void cancle(View v) {
        mEt.setText("");
        finish();
    }
    public void DbAdd() {
        ContentValues cv = new ContentValues();
        cv.put(NoteDb.CONTENT,mEt.getText().toString());
        cv.put(NoteDb.TIME,getTime());
        mSqldb.insert(NoteDb.TABLE_NAME,null,cv);
    }
    public String getTime() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        Date date = new Date();
        String str = sdf.format(date);
        return str;
    }
}

查看条目:

package com.engineer.shizhibin.note;

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class ShowContent extends AppCompatActivity {
    private TextView mTextview;
    private TextView time;
    private NoteDb mDb;
    private SQLiteDatabase mSql;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_show_content);
        mTextview = (TextView)this.findViewById(R.id.showtext);
        time = (TextView)this.findViewById(R.id.showtime);
        mDb = new NoteDb(this);
        mSql = mDb.getWritableDatabase();
        mTextview.setText(getIntent().getStringExtra(NoteDb.CONTENT));
        time.setText(getIntent().getStringExtra(NoteDb.TIME));
    }
    public void delete(View v) {
        int id = getIntent().getIntExtra(NoteDb.ID,0);
        mSql.delete(NoteDb.TABLE_NAME," _id = " + id,null);
        finish();

    }
    public void goBack(View v) {
        finish();
    }
}

MainActivity布局:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="@drawable/back"
    tools:context="com.engineer.shizhibin.note.MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加"
            android:onClick="add"/>
    </LinearLayout>
    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:layout_marginTop="20dp">

    </ListView>

</LinearLayout>

添加Activity布局:

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:background="@drawable/back"
    tools:context="com.engineer.shizhibin.note.AddContent">
    <EditText
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="top"
        android:textColor="#000"
        android:hint="有了记事本,我再也不会忘记事情了!"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="保存"
            android:onClick="save"/>
        <Button
            android:id="@+id/cancle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消"
            android:onClick="cancle"/>
    </LinearLayout>
</LinearLayout>

查看页布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:background="@drawable/back"
    android:layout_height="match_parent"
    tools:context="com.engineer.shizhibin.note.ShowContent">
    <TextView
        android:id="@+id/showtime"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginLeft="10dp"
        android:textSize="20sp"/>
    <TextView
        android:id="@+id/showtext"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:gravity="top"
        android:layout_weight="1"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:textColor="#000"
        android:hint="有了记事本,我再也不会忘记事情了!"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">
        <Button
            android:id="@+id/delete"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="删除"
            android:onClick="delete"/>
        <Button
            android:id="@+id/back"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="返回"
            android:onClick="goBack"/>
    </LinearLayout>
</LinearLayout>

ListView布局

<?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">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="center_vertical"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list_content"
            android:textColor="#000"
            android:textSize="20sp"
            android:text="tv"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/list_time"
            android:textColor="#000"
            android:textSize="20sp"
            android:text="time"/>

    </LinearLayout>
</LinearLayout>

以上就是所有源码,明白Android目录结构,复制到相应的地方,就可以运行了!!!

 

    

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/bingocoder/article/details/80784802

智能推荐

ERROR: 错误: 无效的类型 double precision 输入语法: ““ SQL 状态: 22P02 postgresql_dqizi123的博客-程序员秘密

ERROR: 错误: 无效的类型 double precision 输入语法: "" SQL 状态: 22P02出现这样的错误,是你表里某个字段出现有空或者为null的数据,在应用函数时,如:sqrt,cast这些函数转换出现错误,解决方案:排除掉这些字段的空 pnum&lt;&gt;''...

[推荐系统] 自己动手写一个推荐系统_推荐系统推荐模块怎么写[email protected]的博客-程序员秘密

废话:最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来。在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并对于推荐系统的算法的学术界最新的研究进展和流派作一些介绍。当然由于我做推荐系统之时还年幼,可能有很多偏颇甚至错误的见解,就当抛砖引玉,还请各位大大指点。  Reading lists

零基础也能学会的SpringCloud教程(三):完成微服务的注册_古阙月的博客-程序员秘密

取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。

vue动态生成路由及常见问题_Zichen_Lin的博客-程序员秘密

在一些常见的 RBAC 系统中,对于角色和权限的管理是极其重要的。一个人可以拥有多个`角色`,而一个角色又会被赋予多个`权限`。不同的角色在登录后台系统后,看到的系统菜单也是不同的。在前后端不分离的项目中,后端可以整合 `Spring Security`、`Shiro`等安全框架对页面元素进行标签化管理。但是随着前后分离模式的普及,我们现常常把展示逻辑放到前端来完成。本文就详细聊一聊在 vue 中如何实现对于菜单的动态控制。

电子工程师是怎样的成长之路?_电子工程师的成长之路_无际单片机编程的博客-程序员秘密

每个男人心中都有个钢铁侠梦。希望和托尼史塔克一样拥有改变世界的技术,每当看到史塔克在他工作室研发的时候,我都想拿起我家那台吃灰的烙铁焊它10个板子。可惜,电影和现实还是有很大区别的,电影里的技术男主都是高富帅,实际生活的技术男主都是臭屌丝居多。电影里的技术都是住洋楼养番狗,现实里的技术都是廉价劳动力。就是行内人想出去,行外人想进来这么个局面。不过,能成为电子工程师,还是挺有意思的,至少你能做点小发明之类的。我是2011年电气工程毕业自学转行进入电子工程师行业。到今天为止一直在从事

老码农的技术理想_ztguang的博客-程序员秘密

https://github.com/xufei/blog/issues/16小时候,老师问我,你的理想是什么?我不假思索说是工程师,于是长大之后果然成了工程师。工作这么多年,一直在思考工程师这三个字的意义,终于有一天恍然大悟,原来就是:用技术手段改进世界。那么,在软件方面,目前的世界有哪些问题需要解决呢?有这么一些问题可以思考:现在整个世界的信息化程度是偏高还是偏

随便推点

最大似然和EM算法_em迭代 对数似然比_yysunlife的博客-程序员秘密

机器学习十大算法之一:EM算法。能评得上十大之一,让人听起来觉得挺NB的。什么是NB啊,我们一般说某个人很NB,是因为他能解决一些别人解决不了的问题。神为什么是神,因为神能做很多人做不了的事。那么EM算法能解决什么问题呢?或者说EM算法是因为什么而来到这个世界上,还吸引了那么多世人的目光。       我希望自己能通俗地把它理解或者说明白,但是,EM这个问题感觉真的不太好用通俗的语言去说明白,

图像灰度值 灰度值与像素值的关系_bingqingsuimeng的博客-程序员秘密

图像灰度值的概念是什么?灰度也可以认为是亮度,简单说就是色彩的深浅程度。     实际上在我们的日常生活中,通过三原色色彩深浅的组合,可以组成各种不同的颜色。产品能够展现的灰度数量越多,也就意味着这款产品的色彩表现力更加丰富,能够实现更强的色彩层次。例如三原色16级灰度,能显示的颜色就是16×16×16=4096色。不过目前的产品256级灰度已经非常地普遍了。 所谓颜色或灰度级指黑白显

pytorch-handbook 国内镜像安装pytorch教程(新手入门)_Rosinante.的博客-程序员秘密

安装好 Anaconda 的并且不想听我废话的同学请直接戳:如何使用国内镜像源下载?没有下载 pytorch 中文手册的请戳 pytorch-handbook github:https://github.com/sktyut/pytorch-handbookpytorch handbook是一本开源的书籍,目标是帮助那些希望和使用PyTorch进行深度学习开发和研究的朋友快速入...

react-native使用react-native-scrollable-tab-view的Element type is invalid:xxx)报错_章鱼仔的博客-程序员秘密

错误最近突然发现scrolltabview安卓端会报这个错误发现只要重装了这个依赖就会报错Unhandled JS Exception: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. Check the render method of xxxxScrollableTabView

算法---LeetCode 706. 设计哈希映射_知北行的博客-程序员秘密

1. 题目原题链接不使用任何内建的哈希表库设计一个哈希映射(HashMap)。实现 MyHashMap 类:MyHashMap() 用空映射初始化对象void put(int key, int value) 向 HashMap 插入一个键值对 (key, value) 。如果 key 已经存在于映射中,则更新其对应的值 value 。int get(int key) 返回特定的 key 所映射的 value ;如果映射中不包含 key 的映射,返回 -1 。void remove(key)

SharedPreference存储实战之记住登陆账号密码_Java日拱一卒坚持不懈的博客-程序员秘密

数据持久化就是指将那些内存中的瞬时数据保存到持久化设备中(如手机文件、数据库等),当关机,停电后,数据不丢失。  Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是:  1、文件存储  2、SharedPreference 存储  3、数据库存储。今日使用SharedPreference存储实现记住登陆账号密码的功能:效果图:activi