Android_Note(二)——主界面功能

来源:互联网 发布:radius协议认证端口 编辑:程序博客网 时间:2024/06/07 22:59

     主界面功能分为几个步骤进行介绍,


1、SQLite数据库操作

import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class SqliteDBConnect extends SQLiteOpenHelper {//创建一个帮助类,用于创建、打开和管理数据库public SqliteDBConnect(Context context) {super(context, "NotePad", null, 1);}//创建数据库,第一次调用的时候执行,之后不再执行@Overridepublic void onCreate(SQLiteDatabase db) {System.out.println("Table before Create");db.execSQL("create table note(noteId Integer primary key,noteName varchar(20),noteTime varchar(20),noteContent varchar(400))");System.out.println("Table after Create");}//数据库升级的时候调用@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}

2、更改MainActivity.java,首先需要声明需要用到的变量,然后在onCreate初始化页面的元素,并实例化数据库操作类。

public class MainActivity extends Activity {// 用于显示备忘录文件private ListView lv;// 数据库帮助类private SqliteDBConnect sd;// 每页显示的数目private static int page_size = 8;// 初始化页数private static int page_no = 1, page_count = 0, count = 0;// 添加、首页、末页按钮private Button btnAdd, btnFirst, btnEnd;// 图像按钮:前一页、后一页private ImageButton btnNext, btnPre;// 适配器private SimpleAdapter sa;// 进度条private ProgressBar m_ProgressBar;private ActivityManager am;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView(R.layout.activity_main);// 设置显示进度条setProgressBarVisibility(true);setContentView(R.layout.home);// 实例化ActivityManageram = ActivityManager.getInstance();am.addActivity(this);// 初始化按钮btnAdd = (Button) findViewById(R.id.btnAdd);btnFirst = (Button) findViewById(R.id.btnFirst);btnPre = (ImageButton) findViewById(R.id.btnPre);btnNext = (ImageButton) findViewById(R.id.btnNext);btnEnd = (Button) findViewById(R.id.btnEnd);// 初始化进度条m_ProgressBar = (ProgressBar) findViewById(R.id.progressBar);lv = (ListView) findViewById(R.id.listview);// 初始化数据库sd = new SqliteDBConnect(MainActivity.this);// 获取数据库数据并分页显示fenye();

3、编写获取数据库数据,然后进行分页显示

// 获取数据库数据并分页显示public void fenye() {SQLiteDatabase sdb = sd.getReadableDatabase();count = 0;// 从数据库中查询数据,按升序排列Cursor c1 = sdb.query("note", new String[] { "noteId", "noteName", "noteTime" }, null, null, null, null,"noteId asc");while (c1.moveToNext()) {int noteid = c1.getInt(c1.getColumnIndex("noteId"));// 保存数据的总数if (noteid > count)count = noteid;}c1.close();// 取得总页数page_count = count % page_size == 0 ? count / page_size : count / page_size + 1;// 到达首页if (page_no < 1)page_no = 1;// 到达末页if (page_no > page_count)page_no = page_count;// 查询指定页的数据Cursor c = sdb.rawQuery("select noteId,noteName,noteTime from note limit ?,?",new String[] { (page_no - 1) * page_size + "", page_size + "" });List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();// 遍历循环,取得所有数据,并存储到list中while (c.moveToNext()) {Map<String, Object> map = new HashMap<String, Object>();// 取得备忘录的名字String strName = c.getString(c.getColumnIndex("noteName"));// 如果字数超过12个则去掉后面的字符用...代替if (strName.length() > 20) {map.put("noteName", strName.substring(0, 20) + "...");} else {map.put("noteName", strName);}// 取得时间和id信息,存储到map中map.put("noteTime", c.getString(c.getColumnIndex("noteTime")));map.put("noteId", c.getInt(c.getColumnIndex("noteId")));// 将map添加到list中list.add(map);}c.close();sdb.close();if (count > 0) {// 新建适配器,此处用于主界面listview显示的内容,同时还需要在R.layout.items内进行相关的配置sa = new SimpleAdapter(MainActivity.this, list, R.layout.items, new String[] { "noteName", "noteTime", "noteMain"},new int[] { R.id.noteName, R.id.noteTime, R.id.noteMain });// 设置适配器lv.setAdapter(sa);}}

4、添加菜单项,然后为菜单按钮绑定监听器

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//添加菜单项menu.add(0,1,1,"设置铃声") ;menu.add(0,2,2,"退出") ;return super.onCreateOptionsMenu(menu) ;}

// 为菜单按钮绑定按键监听器@Overridepublic boolean onMenuItemSelected(int featureId, MenuItem item) {switch (item.getItemId()) {// 设置铃声case 1:Intent intent = new Intent();intent.setClass(MainActivity.this, SetAlarm.class);// 跳转到设置铃声的界面startActivity(intent);break;// 退出case 2:AlertDialog.Builder adb2 = new Builder(MainActivity.this);adb2.setTitle("消息");adb2.setMessage("真的要退出吗?");adb2.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 关闭所有的Activityam.exitAllProgress();}});adb2.setNegativeButton("取消", null);// 显示对话框,询问用户是否确定要退出adb2.show();break;default:break;}return super.onMenuItemSelected(featureId, item);}//当用户按键时触发@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {//如果用户按下了back键if (keyCode == KeyEvent.KEYCODE_BACK) {AlertDialog.Builder adb = new Builder(MainActivity.this);adb.setTitle("消息");adb.setMessage("真的要退出?");adb.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {am.exitAllProgress();}});adb.setNegativeButton("取消", null);//显示对话框询问用户是否确定要退出adb.show();}return super.onKeyDown(keyCode, event);}

5、为各个按键绑定监听器,包括短按记事本、长按记事本、点击添加按钮、点击上一页、下一页,末页按钮

// 设置ListView按键监听器lv.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {@SuppressWarnings("unchecked")Map<String, Object> map = (Map<String, Object>) arg0.getItemAtPosition(arg2);Intent intent = new Intent();// 传递备忘录的noteIdintent.putExtra("noteId", map.get("noteId").toString());intent.setClass(MainActivity.this, Lookover.class);// 查看备忘录startActivity(intent);}});//设置ListView长按监听器lv.setOnItemLongClickListener(new OnItemLongClickListener() {@Overridepublic boolean onItemLongClick(AdapterView<?> arg0, View arg1,int arg2, long arg3) {@SuppressWarnings("unchecked")final Map<String, Object> map = (Map<String, Object>) arg0.getItemAtPosition(arg2);AlertDialog.Builder adb = new Builder(MainActivity.this);adb.setTitle(map.get("noteName").toString());//设置弹出选项adb.setItems(new String[] { "删除", "修改"},new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {switch (which) {//删除case 0:SQLiteDatabase sdb = sd.getReadableDatabase();sdb.delete("note", "noteId=?",new String[] { map.get("noteId").toString() });Toast.makeText(MainActivity.this, "删除成功",Toast.LENGTH_SHORT).show();sdb.close();//刷新页面fenye();break;//修改case 1:Intent intent = new Intent();intent.putExtra("noteId", map.get("noteId").toString());intent.setClass(MainActivity.this, AddActivity.class);//进入编辑页面startActivity(intent);break;}}});//显示对话框adb.show();return true;}});// 设置添加按钮监听器btnAdd.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 显示进度条m_ProgressBar.setVisibility(View.VISIBLE);m_ProgressBar.setProgress(0);Intent intent = new Intent();intent.setClass(MainActivity.this, AddActivity.class);// 进入添加页面startActivity(intent);}});// 进入首页btnFirst.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 如果是首页,提示用户当前已经是首页了if (page_no == 1) {Toast.makeText(MainActivity.this, "已经是首页了", Toast.LENGTH_SHORT).show();} else {// 如果不是首页则将当前页码置为1page_no = 1;}// 刷新页面fenye();}});// 下一页按键监听器btnNext.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 如果当前是最后一页,则提示用户已经到最后一页了if (page_no == page_count) {Toast.makeText(MainActivity.this, "已经是末页了", Toast.LENGTH_SHORT).show();} else {// 否则,当前的页码加1page_no += 1;}// 刷新页面fenye();}});// 上一页按键监听器btnPre.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 如果当前是第一页,则提示用户当前已经是首页了if (page_no == 1) {Toast.makeText(MainActivity.this, "已经是首页了", Toast.LENGTH_SHORT).show();} else {// 否则,当前页码减1page_no -= 1;}// 刷新页面fenye();}});// 设置末页按键监听器btnEnd.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub// 如果当前是最后一页,提示用户当前已经是末页了if (page_no == page_count) {Toast.makeText(MainActivity.this, "已经是末页了", Toast.LENGTH_SHORT).show();} else {// 否则将当前页置为末页page_no = page_count;}// 刷新页面fenye();}});






0 0
原创粉丝点击