APP(简易便签)

一个简易便签

代码有一大部分是借鉴别人的,赶时间为了完成任务,所以直接抄了很多。
就是一个很简易的便签,主要用到的技术就是数据库的技术。界面很简洁,亲自设计。
然后就把代码放在这里吧。

1.界面布局

(1)主界面

(2)新建界面

(3)删除界面

(4)分享界面

2.布局代码实现

(1)主界面的布局
<RelativeLayout 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:background="#efefef"
android:paddingLeft="13dp"
android:paddingRight="13dp"
android:paddingBottom="5dp"
android:paddingTop="5dp"
tools:context=".MainActivity" >

<ListView
    android:id="@+id/lv_bwlList"
    android:divider="#00000000"
    android:dividerHeight="9dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

<ImageButton
    android:id="@+id/btnAdd"
    android:layout_width="70dp"
    android:layout_height="70dp"
    android:scaleType="centerCrop"
    android:src="@mipmap/addd"
    android:alpha="70"
    android:background="#00ffffff"
    android:layout_margin="10dp"
    android:layout_centerHorizontal="true"
    android:layout_alignParentBottom="true"/>

</RelativeLayout>
(2)新建界面的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:layout_margin="10dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="vertical"
        android:weightSum="1">

        <TextView
            android:id="@+id/textView1"
            android:textSize="20sp"
            android:textColor="#636363"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/title" />

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:paddingLeft="5dp"
            android:textColor="#626366"
            android:background="@null"
            android:ems="10">
            <requestFocus />
        </EditText>

        <TextView
            android:id="@+id/textView2"
            android:textSize="20sp"
            android:textColor="#636363"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/content" />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="top"
            android:textColor="#626366"
            android:background="@null"
            android:layout_marginTop="12dp"
            android:layout_marginBottom="5dp"
            android:paddingLeft="5dp" />

    </LinearLayout>

    <ImageButton
        android:id="@+id/saveButton"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:scaleType="centerCrop"
        android:src="@mipmap/save"
        android:alpha="70"
        android:background="#00ffffff"
        android:layout_margin="10dp"
        android:layout_gravity="center"/>

</LinearLayout>
(3)ListView子项布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FFFFFF">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="90dp"
        android:layout_weight="1"
        android:paddingLeft="15dp"
        android:textColor="#3d3d3d"
        android:gravity="center_vertical"
        android:textSize="16sp"
        android:text="@string/title2" />

    <TextView
        android:id="@+id/textView2"
        android:textSize="13sp"
        android:layout_width="wrap_content"
        android:layout_height="90dp"
        android:gravity="center"
        android:paddingRight="10dp"
        android:text="@string/time" />

</LinearLayout>

2.菜单代码实现

(1)主界面菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/item1"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/New"/>
    <item
        android:id="@+id/item2"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/back"/>

</menu>
(2)新建界面菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/share"/>

</menu>

3.数据库代码实现

(1)存放数据的类
public class Cuns {

    private String title;   //标题
    private String content; //内容
    private String times;   //时间
    private int ids;        //编号

    public Cuns(String ti,int id,String con ,String time){
        this.ids=id;
        this.title=ti;
        this.content=con;
        this.times=time;
    }

    public Cuns(String ti,String con,String time){
        this.title=ti;
        this.content=con;
        this.times=time;
    }

    public Cuns(int i,String ti,String time){
        this.ids=i;
        this.title=ti;
        this.times=time;
    }

    public Cuns(String ti,String con){
        this.title=ti;
        this.content=con;
    }

    public int getIds() {
        return ids;
    }

    public String getTitle() {
        return title;
    }

    public String getContent() {
        return content;
    }

    public String getTimes() {
        return times;
    }
}
(2)新建 MyOpenHelper 类继承自 SQLiteOpenHelper 类
/*
 * 重写了SQLiteOpenHelper类,用来建立数据库和表
 */
public class MyOpenHelper extends SQLiteOpenHelper{

    public MyOpenHelper(Context context) {
        super(context, "mydate", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table mybook(" +
                "ids integer PRIMARY KEY autoincrement," +
                "title text," +
                "content text," +
                "times text)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }

}
(3)新建 MyDataBase 类用来操作数据库
public class MyDataBase {

    Context context;
    MyOpenHelper myHelper;
    SQLiteDatabase myDatabase;
    /*
     * 别的类实例化这个类的同时,创建数据库
     */
    public MyDataBase(Context con){
        this.context=con;
        myHelper=new MyOpenHelper(context);
    }
    /*
     * 得到ListView的数据,从数据库里查找后解析
     */
    public ArrayList<Cuns> getArray(){
        ArrayList<Cuns> array = new ArrayList<Cuns>();
        ArrayList<Cuns> array1 = new ArrayList<Cuns>();
        myDatabase = myHelper.getWritableDatabase();
        Cursor cursor=myDatabase.rawQuery("select ids,title,times from mybook" , null);
        cursor.moveToFirst();
        while(!cursor.isAfterLast()){
            int id = cursor.getInt(cursor.getColumnIndex("ids"));
            String title = cursor.getString(cursor.getColumnIndex("title"));
            String times = cursor.getString(cursor.getColumnIndex("times"));
            Cuns cun = new Cuns(id, title, times);
            array.add(cun);
            cursor.moveToNext();
        }
        myDatabase.close();
        for (int i = array.size(); i >0; i--) {
            array1.add(array.get(i-1));
        }
        return array1;
    }

    /*
     * 返回可能要修改的数据
     */
    public Cuns getTiandCon(int id){
        myDatabase = myHelper.getWritableDatabase();
        Cursor cursor=myDatabase.rawQuery("select title,content from mybook where ids='"+id+"'" , null);
        cursor.moveToFirst();
        String title=cursor.getString(cursor.getColumnIndex("title"));
        String content=cursor.getString(cursor.getColumnIndex("content"));
        Cuns cun=new Cuns(title,content);
        myDatabase.close();
        return cun;
    }

    /*
     * 用来修改日记
     */
    public void toUpdate(Cuns cun){
        myDatabase = myHelper.getWritableDatabase();
        myDatabase.execSQL(
                "update mybook set title='"+ cun.getTitle()+
                "',times='"+cun.getTimes()+
                "',content='"+cun.getContent() +
                "' where ids='"+ cun.getIds()+"'");
        myDatabase.close();
    }

    /*
     * 用来增加新的日记
     */
    public void toInsert(Cuns cun){
        myDatabase = myHelper.getWritableDatabase();
        myDatabase.execSQL("insert into mybook(title,content,times)values('"
                + cun.getTitle()+"','"
                +cun.getContent()+"','"
                +cun.getTimes()
                +"')");
        myDatabase.close();
    }

    /*
     * 长按点击后选择删除日记
     */
    public void toDelete(int ids){
        myDatabase  = myHelper.getWritableDatabase();
        myDatabase.execSQL("delete from mybook where ids="+ids+"");
        myDatabase.close();
    }
}

4.自定义 Adapter

/*
 * 自定义的ListView的Adapter
 */
public class MyAdapter extends BaseAdapter{

    LayoutInflater inflater;
    ArrayList<Cuns> array;

    public MyAdapter(LayoutInflater inf,ArrayList<Cuns> arry){
        this.inflater=inf;
        this.array=arry;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder vh;
        if(convertView==null){
            vh=new ViewHolder();
            convertView=inflater.inflate(R.layout.list_item, null);//注意导包,别导系统包
            vh.tv1=(TextView) convertView.findViewById(R.id.textView1);
            vh.tv2=(TextView) convertView.findViewById(R.id.textView2);
            convertView.setTag(vh);
        }
        vh=(ViewHolder) convertView.getTag();
        vh.tv1.setText(array.get(position).getTitle());
        vh.tv2.setText(array.get(position).getTimes());
        return convertView;
    }
    class ViewHolder{
        TextView tv1,tv2;
    }
}

5.Activity代码实现

(1)主界面 Activity 代码
/*
 * 这个类主要包括五个点击事件,分别为
 * ListView的长按点击事件,用来AlertDialog来判断是否删除数据。
 * ListView的点击事件,跳转到第二个界面,用来修改数据
 * 新建便签按钮的点击事件,跳转到第二界面,用来新建便签
 * menu里的退出事件,用来退出程序
 * menu里的新建事件,用来新建便签
 */

public class MainActivity extends AppCompatActivity {

    ImageButton imageButton;
    ListView lv;
    LayoutInflater inflater;
    ArrayList<Cuns> array;
    MyDataBase mdb;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.lv_bwlList);
        imageButton=(ImageButton) findViewById(R.id.btnAdd);
        inflater=getLayoutInflater();

        mdb=new MyDataBase(this);
        array=mdb.getArray();
        MyAdapter adapter=new MyAdapter(inflater,array);
        lv.setAdapter(adapter);
        /*
         * 点击listView里面的item,用来修改日记
         */
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(getApplicationContext(),NewNote.class);
                intent.putExtra("ids",array.get(position).getIds() );
                startActivity(intent);
                MainActivity.this.finish();
            }
        });

        /*
         * 长点后来判断是否删除数据
         */
        lv.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                                           final int position, long id) {
                //AlertDialog,来判断是否删除日记。
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("删除")
                        .setMessage("是否删除笔记")
                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {

                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                mdb.toDelete(array.get(position).getIds());
                                array=mdb.getArray();
                                MyAdapter adapter=new MyAdapter(inflater,array);
                                lv.setAdapter(adapter);
                            }
                        })
                        .create().show();
                return true;
            }
        });
        /*
         * 按钮点击事件,用来新建日记
         */
        imageButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent=new Intent(getApplicationContext(),NewNote.class);
                startActivity(intent);
                MainActivity.this.finish();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.item1:
                Intent intent=new Intent(getApplicationContext(),NewNote.class);
                startActivity(intent);
                this.finish();
                break;
            case R.id.item2:
                this.finish();
                break;
            default:
                break;
        }
        return true;
    }
}
(2)新建界面 Activity 代码
public class NewNote extends AppCompatActivity {

    EditText ed1,ed2;
    ImageButton imageButton;
    MyDataBase myDatabase;
    Cuns cun;
    int ids;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_new_note);
        ed1=(EditText) findViewById(R.id.editText1);
        ed2=(EditText) findViewById(R.id.editText2);
        imageButton=(ImageButton) findViewById(R.id.saveButton);
        myDatabase=new MyDataBase(this);

        Intent intent=this.getIntent();
        ids=intent.getIntExtra("ids", 0);
        //默认为0,不为0,则为修改数据时跳转过来的
        if(ids!=0){
            cun=myDatabase.getTiandCon(ids);
            ed1.setText(cun.getTitle());
            ed2.setText(cun.getContent());
        }
        //保存按钮的点击事件,他和返回按钮是一样的功能,所以都调用isSave()方法;
        imageButton.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                isSave();
            }
        });
    }

    /*
     * 返回按钮调用的方法。
     */
    @Override
    public void onBackPressed() {
        //super.onBackPressed();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd  HH:mm:ss");
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        String times = formatter.format(curDate);
        String title=ed1.getText().toString();
        String content=ed2.getText().toString();
        //是要修改数据
        if(ids!=0){
            cun=new Cuns(title,ids, content, times);
            myDatabase.toUpdate(cun);
            Intent intent=new Intent(NewNote.this,MainActivity.class);
            startActivity(intent);
            NewNote.this.finish();
        }
        //新建日记
        else{
            if(title.equals("")&&content.equals("")){
                Intent intent=new Intent(NewNote.this,MainActivity.class);
                startActivity(intent);
                NewNote.this.finish();
            }
            else{
                cun=new Cuns(title,content,times);
                myDatabase.toInsert(cun);
                Intent intent=new Intent(NewNote.this,MainActivity.class);
                startActivity(intent);
                NewNote.this.finish();
            }

        }
    }
    private void isSave(){
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd  HH:mm:ss");
        Date curDate = new Date(System.currentTimeMillis());//获取当前时间
        String times = formatter.format(curDate);
        String title=ed1.getText().toString();
        String content=ed2.getText().toString();
        //是要修改数据
        if(ids!=0){
            cun=new Cuns(title,ids, content, times);
            myDatabase.toUpdate(cun);
            Intent intent=new Intent(NewNote.this,MainActivity.class);
            startActivity(intent);
            NewNote.this.finish();
        }
        //新建日记
        else{
            cun=new Cuns(title,content,times);
            myDatabase.toInsert(cun);
            Intent intent=new Intent(NewNote.this,MainActivity.class);
            startActivity(intent);
            NewNote.this.finish();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.second, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                Intent intent=new Intent(Intent.ACTION_SEND);
                intent.setType("text/plain");
                intent.putExtra(Intent.EXTRA_TEXT,
                        "标题:"+ed1.getText().toString()+"    " +
                        "内容:"+ed2.getText().toString());
                startActivity(intent);
                break;

            default:
                break;
        }
        return false;
    }
}

6.附

<resources>
    <string name="app_name">便签</string>
    <string name="title">标题:</string>
    <string name="content">内容:</string>
    <string name="title2">无标题:</string>
    <string name="time">年/月/日 时间</string>
    <string name="New">新建</string>
    <string name="back">退出</string>
    <string name="share">分享</string>
</resources>

7.又是然后

该复习准备考试了啊!呵呵

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值