【练习】简陋的便签

一、项目介绍:

      这是一个简易的便签,主要就是listview和数据库sqlite

二、项目运行效果图:



三、工程目录:


四、代码:

1.Chaxun.java

package com.example.Shujvku;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.yyd.view.entity.Bianqian;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class Chaxun {
	private Shujvkulianjie dbHelper;
	 private SQLiteDatabase sqLiteDatabase;
	 public Chaxun(Context context){
		 dbHelper=new Shujvkulianjie(context);
	 }
	 
	 	 //添加
		 //添加数据传入 标题 内容  id和时间自动获取 
		 public void tianjia(String title ,String content){
			 sqLiteDatabase=dbHelper.openDatabase();
			 String sql="insert into notes(title,content) values(?,?)";
			 sqLiteDatabase.execSQL(sql, new String[]{title,content});
			 sqLiteDatabase.close();
		 }
		 
		//删除
		 public void shanchu(String id){  //得到id 通过id对表中的数据进行删除
			 sqLiteDatabase=dbHelper.openDatabase();
			 String sql="delete from notes where id=?";
			 sqLiteDatabase.execSQL(sql,new String[]{id});
			 sqLiteDatabase.close();
		 }
		 
		//修改
		 //通过id得到要修改的数据       把传入的标题和内容进行修改
		 public void xiugai(String id,String biaoti,String neirong){
			 sqLiteDatabase=dbHelper.openDatabase();
			 String sql="update notes set title=?,content=? where id=?";
			 sqLiteDatabase.execSQL(sql,new String[]{biaoti,neirong,id});
			 sqLiteDatabase.close();
		 }
	 
	 /*yyd修改的查询方法*/
	 public List viewlist_bianqian(){
		 List<Bianqian> list=new ArrayList<Bianqian>();
		 Bianqian hero;
		 sqLiteDatabase=dbHelper.openDatabase();//打开数据库
		 Cursor cursor = sqLiteDatabase.rawQuery("select * from notes ",null
                );//第二条数据
		 while(cursor.moveToNext()) {
			 int id=Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
			 String n_title=cursor.getString(cursor.getColumnIndex("title"));
			 String n_content=cursor.getString(cursor.getColumnIndex("content"));
			 String n_postdate=cursor.getString(cursor.getColumnIndex("datetime"));
			 hero=new Bianqian(id, n_title, n_content, 1, 1,true, n_postdate);
			 list.add(hero);
		 }
		 sqLiteDatabase.close();//关闭数据库
		 return list;
	 }
	 
	 /*yyd修改的模糊查询代码*/
	 public List sousu(String title){
		 List<Bianqian> list=new ArrayList<Bianqian>();
		 Bianqian hero;
		 sqLiteDatabase=dbHelper.openDatabase();//打开数据库
		 Cursor cursor = sqLiteDatabase.rawQuery("select * from notes where title like ?",new String[]{"%" +title +"%"}
                );//第二条数据
		 while(cursor.moveToNext()) {
			 int id=Integer.parseInt(cursor.getString(cursor.getColumnIndex("id")));
			 String n_title=cursor.getString(cursor.getColumnIndex("title"));
			 String n_content=cursor.getString(cursor.getColumnIndex("content"));
			 String n_postdate=cursor.getString(cursor.getColumnIndex("datetime"));
			 hero=new Bianqian(id, n_title, n_content, 1, 1,true, n_postdate);
			 list.add(hero);
		 }
		 sqLiteDatabase.close();//关闭数据库
		 return list;
	 }
	 
}
2.Shujvkulianjie.java

package com.example.Shujvku;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;

import com.example.test.R;

public class Shujvkulianjie {
	private final int BUFFER_SIZE = 400000;
	public static final String DB_NAME = "windnote.db"; // 保存的数据库文件名
	public static final String PACKAGE_NAME = "com.example.test";// 应用的包名
	public static final String DB_PATH = "/data"
			+ Environment.getDataDirectory().getAbsolutePath() + "/"
			+ PACKAGE_NAME + "/databases";
	/*// SDCard 定义数据库的存放路径
	private final String DATABASE_PATH = android.os.Environment
			.getExternalStorageDirectory().getAbsolutePath() + "/dictionary";*/

	private Context context;

	public Shujvkulianjie(Context context) {
		this.context = context;
	}

	public SQLiteDatabase openDatabase() {
		try {
			File myDataPath = new File(DB_PATH);
			if (!myDataPath.exists()) {
				myDataPath.mkdirs();// 如果没有这个目录则创建
			}
			String dbfile = myDataPath + "/" + DB_NAME;
			if (!(new File(dbfile).exists())) {// 判断数据库文件是否存在,若不存在则执行导入,否则直接打开数据库
				InputStream is = context.getResources().openRawResource(
						R.raw.windnote); // 欲导入的数据库
				FileOutputStream fos = new FileOutputStream(dbfile);
				byte[] buffer = new byte[BUFFER_SIZE];
				int count = 0;
				while ((count = is.read(buffer)) > 0) {
					fos.write(buffer, 0, count);
				}
				fos.close();
				is.close();
			}
			SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile,
					null);
			return db;
		} catch (FileNotFoundException e) {
			Log.e("Database", "File not found");
			e.printStackTrace();
		} catch (IOException e) {
			Log.e("Database", "IO exception");
			e.printStackTrace();
		}
		return null;
	}

}
3.MainActivity.java
package com.example.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.example.Shujvku.Chaxun;
import com.example.test.R;
import com.yyd.view.dao.bianqianAdapter;
import com.yyd.view.entity.Bianqian;

/**
 * @author yyd 便签列表显示的java文件
 * 
 */
public class MainActivity extends Activity {
	private Button btn_insert;
	private ListView lv;
	private List<Bianqian> list_bianqian;
	private Chaxun wordDao;
	private bianqianAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn_insert=(Button) findViewById(R.id.button1);
		lv = (ListView) findViewById(R.id.listView1);// 获取控件
	}
	public void onResume(){
		viewlist();// 显示列表的方法
		super.onResume();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void viewlist() {
		wordDao = new Chaxun(this);
		list_bianqian = new ArrayList<Bianqian>();
		list_bianqian = wordDao.viewlist_bianqian();// 通过查询方法获得list;
		// String name=String.valueOf(list1.get(0).getN_content());//第一条数据
//		Toast.makeText(MainActivity.this,
//				"查询成功" + list_bianqian.get(0).getN_content().toString(),
//				Toast.LENGTH_SHORT).show();// 提示查询成功
		adapter = new bianqianAdapter(this, R.layout.fruit_item, list_bianqian);// 当前布局,子布局,数据源
		lv.setAdapter(adapter);
		onclic_edt();
		onclick_select();// 长按按钮弹出选择框
	}
	/* yyd单击传到添加页面 */
	public void onclic_add(View v) {
		Intent intent=new Intent(MainActivity.this,Tianjia.class);
		startActivity(intent);
	}
	/* yyd单击传到编辑页面 */
	public void onclic_edt() {
		lv.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				// TODO Auto-generated method stub
				Bianqian bianqian1 = new Bianqian();
				int n_id = list_bianqian.get(arg2).getId();
				String n_title = list_bianqian.get(arg2).getN_title();
				String n_content = list_bianqian.get(arg2).getN_content();
				String n_postdate = list_bianqian.get(arg2).getN_postdate();
				bianqian1 = new Bianqian(n_id, n_title, n_content, 1, 1, true,
						n_postdate);
				Intent intent = new Intent(MainActivity.this, Xiugai.class);
				Bundle bundle = new Bundle();
				bundle.putString("n_id", String.valueOf(n_id));
				bundle.putString("n_title", String.valueOf(n_title));
				bundle.putString("n_content", String.valueOf(n_content));
				intent.putExtras(bundle);
				// Toast.makeText(MainActivity.this,
				// "id:" + n_id+"\n title"+n_title+"\n content"+n_content,
				// Toast.LENGTH_SHORT).show();
				startActivity(intent);// 将当前list的类传到编辑页面
			}
		});
	}
	
	
	
	/* yyd添加单击长按弹出菜单。 */
	public void onclick_select() {
		lv.setOnItemLongClickListener(new OnItemLongClickListener() {
			@Override
			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					final int arg2, long arg3) {
				// Toast.makeText(MainActivity.this, "asdf",
				// Toast.LENGTH_SHORT).show();
				// Toast.makeText(MainActivity.this,
				// "您选择的是" + list_.get(arg2).getN_content().toString(),
				// Toast.LENGTH_SHORT).show();
				new AlertDialog.Builder(MainActivity.this)
						.setTitle("系统提示")
						.setIcon(R.drawable.ji03)
						.setItems(R.array.item,
								new DialogInterface.OnClickListener() {
									@Override
									public void onClick(DialogInterface arg0,
											int arg1) {
										String[] pk = MainActivity.this
												.getResources().getStringArray(
														R.array.item);// 当前点击的是哪个array
										if (pk[arg1].equals("删除")) {
											// 删除数据库
											int id = list_bianqian.get(arg2)
													.getId();
											String id1 = String.valueOf(id);
											// 执行数据库删除语句
											wordDao.shanchu(id1);//执行的删除方法
											list_bianqian.remove(arg2);//在listview中删除这一行
											adapter.notifyDataSetChanged();//更新listview
											// Toast.makeText(getActivity(),
											// "位置"+p, 1000).show();
										}
									}
								})
						.setNegativeButton("取消",
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										// TODO Auto-generated method stub
									}
								}).show();
				return true;
			}
		});
	}
	/* yyd添加一个返回按钮的监听器。 */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			// 创建退出对话框
			AlertDialog isExit = new AlertDialog.Builder(this).create();
			// 设置对话框标题
			isExit.setTitle("系统提示");
			// 设置对话框消息
			isExit.setMessage("确定要退出吗?");
			// 添加选择按钮并注册监听
			isExit.setButton("退出", listener);
			isExit.setButton2("取消", listener);
			// 显示对话框
			isExit.show();
		}
		return false;
	}
	DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			switch (which) {
			case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
				finish();
				break;
			case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
				break;
			default:
				break;
			}
		}
	};
}
4.bianqianAdapter.java
package com.yyd.view.dao;

import java.util.List;

import com.example.test.R;
import com.yyd.view.entity.Bianqian;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * @author yyd
 * 便签显示用的自定义Adapter
 *
 */
public class bianqianAdapter extends ArrayAdapter{
	private int resourceId;
	public bianqianAdapter(Context context, int resource, List objects) {
		super(context, resource, objects);
		//当前布局,子布局id,数据源
		// TODO Auto-generated constructor stub
		resourceId=resource;
	}
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		Bianqian hero=(Bianqian) getItem(position);
		View view = LayoutInflater.from(getContext()).inflate(resourceId, null);//获取样式;
		ImageView fruitImage = (ImageView) view.findViewById(R.id.img_biaoqian_title);
		TextView fruitTitle = (TextView) view.findViewById(R.id.tv_biaoqian_title);
		TextView fruitContent = (TextView) view.findViewById(R.id.tv_biaoqian_content);
		TextView fruitTime = (TextView) view.findViewById(R.id.tv_biaoqian_time);

		fruitImage.setImageResource(R.drawable.ic_launcher);//设置样式
		fruitTitle.setText(hero.getN_title());
		fruitContent.setText(hero.getN_content());
		fruitTime.setText(hero.getN_postdate());
		return view;//返回样式
	}
}
5.Tianjia.java

package com.example.test;

import com.example.Shujvku.Chaxun;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Tianjia extends Activity {
	private Chaxun wordDao;
	private Button btnbaocun;
	private EditText etbiaoti;
	private EditText etneirong;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_tianjia);
		// 获取控件
		btnbaocun = (Button) findViewById(R.id.btnbaocun);
		etbiaoti = (EditText) findViewById(R.id.etbiaoti);
		etneirong = (EditText) findViewById(R.id.etneirong);
	}

	public void tianjia(View view) {
		if (TextUtils.isEmpty(etbiaoti.getText().toString())) {
			Toast.makeText(Tianjia.this, "请输入标题", Toast.LENGTH_SHORT).show();// 提示添加成功
		} else if (TextUtils.isEmpty(etneirong.getText().toString())) {
			Toast.makeText(Tianjia.this, "请输入内容", Toast.LENGTH_SHORT).show();// 提示添加成功
		} else {
			wordDao = new Chaxun(this);
			String biaoti = etbiaoti.getText().toString().trim();// 保存一个起始结尾都被删除的文本
			String neirong = etneirong.getText().toString().trim();
			wordDao.tianjia(biaoti, neirong);
			Toast.makeText(Tianjia.this, "添加成功", Toast.LENGTH_SHORT).show();// 提示添加成功
			finish();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.tianjia, menu);
		return true;
	}

	/* yyd添加一个返回按钮的监听器。 */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			// 如果内容为空
			if (TextUtils.isEmpty(etbiaoti.getText().toString())) {
				if (TextUtils.isEmpty(etneirong.getText().toString())) {
					finish();
				}
			} else {
				// 创建退出对话框
				AlertDialog isExit = new AlertDialog.Builder(this).create();
				// 设置对话框标题
				isExit.setTitle("系统提示");
				// 设置对话框消息
				isExit.setMessage("确定要退出吗?");
				// 添加选择按钮并注册监听
				isExit.setButton("退出", listener);
				isExit.setButton2("取消", listener);
				// 显示对话框
				isExit.show();
			}
		}
		return false;
	}

	DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			switch (which) {
			case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
				finish();
				break;
			case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
				break;
			default:
				break;
			}
		}
	};
<span style="font-size:14px;">}
</span>
6. Xiugai .java

package com.example.test;

import com.example.Shujvku.Chaxun;
import com.yyd.view.entity.Bianqian;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Xiugai extends Activity {
	private Button btnquerenxiugai;
	private EditText etxiugaibiaoti;
	private EditText etxiugaineirong;
	private Chaxun wordDao;
	String id = null;
	String biaoti;
	String neirong;
	String biaotiqian;// 刚传过来的参数
	String neirongqian;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_xiugai);
		Bianqian bianqian = new Bianqian();// 实例化一个便签实体类

		btnquerenxiugai = (Button) findViewById(R.id.btnquedingxiugai);
		etxiugaibiaoti = (EditText) findViewById(R.id.etxiugaibiaoti);
		etxiugaineirong = (EditText) findViewById(R.id.etxiugaineirong);// 获取控件

		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		id = bundle.getString("n_id");
		String title = bundle.getString("n_title");
		biaotiqian = title;
		String content = bundle.getString("n_content");
		neirongqian = content;

		etxiugaibiaoti.setText(title);
		etxiugaineirong.setText(content);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.xiugai, menu);
		return true;
	}

	/* 点击修改事件 */
	public void xiugai(View view) {
		if (TextUtils.isEmpty(etxiugaibiaoti.getText().toString())) {
			Toast.makeText(Xiugai.this, "请输入标题", Toast.LENGTH_SHORT).show();// 提示添加成功
		} else if (TextUtils.isEmpty(etxiugaineirong.getText().toString())) {
			Toast.makeText(Xiugai.this, "请输入内容", Toast.LENGTH_SHORT).show();// 提示添加成功
		} else {
			wordDao = new Chaxun(this);
			// id接收数据库中查到的id,然后点击进入到修改页面时传入id
			biaoti = etxiugaibiaoti.getText().toString().trim();
			neirong = etxiugaineirong.getText().toString().trim();
			wordDao.xiugai(id, biaoti, neirong);
			Toast.makeText(Xiugai.this, "修改成功", Toast.LENGTH_SHORT).show();// 提示添加成功
			finish();
		}
	}

	/* yyd添加一个返回按钮的监听器。 */
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		// 如果做出了修改

		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (!biaotiqian.equals(etxiugaibiaoti.getText().toString())||!neirongqian.equals(etxiugaineirong.getText().toString())) {// 标题变化
				// 创建退出对话框
				AlertDialog isExit = new AlertDialog.Builder(this).create();
				// 设置对话框标题
				isExit.setTitle("系统提示");
				// 设置对话框消息
				isExit.setMessage("确定要退出吗?");
				// 添加选择按钮并注册监听
				isExit.setButton("退出", listener);
				isExit.setButton2("取消", listener);
				// 显示对话框
				isExit.show();
			}
				else{
					finish();
				}
		}
		return false;
	}

	DialogInterface.OnClickListener listener = new android.content.DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			switch (which) {
			case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
				finish();
				break;
			case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
				break;
			default:
				break;
			}
		}
	};
}

五、总结:

这是15年暑假期间,软件大赛雏形,只有大体功能,这其中的有些功能留作以后备用。(注:本人英语太差)

六、项目下载地址:

http://download.csdn.net/download/yyd_diablo/8934725


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值