基本信息
源码名称:android 通讯录应用 设计源码下载(含设计文档),毕业设计可参考
源码大小:4.67M
文件格式:.zip
开发语言:Java
更新时间:2014-06-26
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
package com.luting.contact;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnKeyListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import com.luting.contact.db.DBHelper;
import com.luting.contact.entity.User;
import com.luting.contact.R;
public class Main extends Activity {
//显示所有数据的ListView
ListView lv;
ArrayList list;
//拥有所有数据的Adapter
SimpleAdapter adapter;
//屏幕下方的工具栏
GridView bottomMenuGrid;
//主菜单的布局
GridView mainMenuGrid;
//主菜单的视图
View mainMenuView;
//登录的视图
View loginView;
//装搜索框的linearlayout,默认情况下visibility=gone
LinearLayout searchLinearout;
LinearLayout mainLinearLayout;
//搜索框
EditText et_search;
EditText et_enter_file_name;
//主菜单的对话框
AlertDialog mainMenuDialog;
//确认对话框
AlertDialog confirmDialog;
//进度条对话框
AlertDialog progressDialog;
//输入文件名的对话框
AlertDialog enterFileNameDialog;
//输入用户名密码的对话框
AlertDialog loginDialog;
//表示保密状态
boolean privacy = false;
//存储标记的数目
int markedNum;
//存储标记条目的_id号
ArrayList<Integer> deleteId;
// 菜单文字
String[] main_menu_itemName = { "显示所有", "删除所有", "备份数据", "还原数据", "个人空间", "后退"};
//主菜单图片
int[] main_menu_itemSource = {
R.drawable.showall,
R.drawable.menu_delete,
R.drawable.menu_backup,
R.drawable.menu_restore,
R.drawable.menu_fresh,
R.drawable.menu_return};
String[] bottom_menu_itemName = { "添加", "查找", "删除", "菜单","退出" };
String fileName;
int[] bottom_menu_itemSource = {
R.drawable.menu_new_user,
R.drawable.menu_search,
R.drawable.menu_delete,
R.drawable.controlbar_showtype_list,
R.drawable.menu_exit };
/*
* onCreate做的工作就是把listView显示出来
* bottomMenuGrid,mainMenuGrid,searchLinearout都是到要用
* 的时候再初始化,并且只初始化一次
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainLinearLayout = (LinearLayout)findViewById(R.id.list_ll);
DBHelper helper = new DBHelper(this);//获得所有用户的list
helper.openDatabase(); //打开数据库,就打开这一次,因为Helper中的SQLiteDatabase是静态的。
list = helper.getAllUser(privacy);//拿到所有保密状态为privacy的用户的list
lv = (ListView)findViewById(R.id.lv_userlist); //创建ListView对象
if(list.size() == 0) {
Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);
mainLinearLayout.setBackgroundDrawable(nodata_bg);
setTitle("没有查到任何数据!");
}
//将数据与adapter集合起来
adapter = new SimpleAdapter(this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);//将整合好的adapter交给listview,显示给用户看
lv.setOnItemClickListener(new OnItemClickListener() {
/*
* 响应单击事件,单点击某一个选项的时候,跳转到用户详细信息页面
*/
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
HashMap item = (HashMap)arg0.getItemAtPosition(arg2);
int _id = Integer.parseInt(String.valueOf(item.get("_id")));
Intent intent = new Intent(Main.this,UserDetail.class);
User user = new User();
user._id = Integer.parseInt(String.valueOf(item.get("_id")));
user.address = String.valueOf(item.get("address"));
user.company = String.valueOf(item.get("company"));
user.email = String.valueOf(item.get("email"));
user.familyPhone = String.valueOf(item.get("familyphone"));
user.mobilePhone = String.valueOf(item.get("mobilephone"));
user.officePhone = String.valueOf(item.get("officephone"));
user.otherContact = String.valueOf(item.get("othercontact"));
user.position = String.valueOf(item.get("position"));
user.remark = String.valueOf(item.get("remark"));
user.username = String.valueOf(item.get("name"));
user.zipCode = String.valueOf(item.get("zipcode"));
user.imageId = Integer.parseInt(String.valueOf(item.get("imageid")));
intent.putExtra("user", user);
if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
}
/*将arg2作为请求码传过去 用于标识修改项的位置*/
startActivityForResult(intent, arg2);
}
});
lv.setCacheColorHint(Color.TRANSPARENT); //设置ListView的背景为透明
lv.setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
if(deleteId == null) {
deleteId = new ArrayList<Integer>();
}
HashMap item = (HashMap)arg0.getItemAtPosition(arg2);
Integer _id = Integer.parseInt(String.valueOf(item.get("_id")));
RelativeLayout r = (RelativeLayout)arg1;
ImageView markedView = (ImageView)r.getChildAt(2);
if(markedView.getVisibility() == View.VISIBLE) {
markedView.setVisibility(View.GONE);
deleteId.remove(_id);
} else {
markedView.setVisibility(View.VISIBLE);
deleteId.add(_id);
}
return true;
}
});
//为list添加item选择器
Drawable bgDrawable = getResources().getDrawable(R.drawable.list_bg);
lv.setSelector(bgDrawable);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//清除deleteId的内容
if(deleteId != null) {
deleteId.clear();
}
//当resultCode==3时代表添加了一个用户返回,当resultCode==4的时候代表修改了用户,或者删除了用户,其他条件代表数据没有变化
if(resultCode == 3 || resultCode == 4) {
DBHelper helper = new DBHelper(this);
list = helper.getAllUser(privacy);
adapter =
new SimpleAdapter(
this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
if(list.size() > 0){
mainLinearLayout.setBackgroundDrawable(null);
}
}
lv.setAdapter(adapter); //将整合好的adapter交给listview,显示给用户看
/**
* resultCode只有3、4、5
* 当等于4或者5的时候,代表由UserDetail转过来的。在转想UserDetail的时候,requestCode的值设置的是选中项的位置
*/
if(resultCode == 3) {
lv.setSelection(list.size());
} else {
lv.setSelection(requestCode);
}
}
/**
* 响应点击Menu按钮时的事件,用于设置底部菜单是否可见
*/
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_MENU) {
loadBottomMenu();
if(bottomMenuGrid.getVisibility() == View.VISIBLE) {
if(searchLinearout != null && searchLinearout.getVisibility() == View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
}
bottomMenuGrid.setVisibility(View.GONE);
} else {
bottomMenuGrid.setVisibility(View.VISIBLE);
}
}
return super.onKeyDown(keyCode, event);
}
//弹出的菜单对话框
private void loadBottomMenu() {
if(bottomMenuGrid == null) {
bottomMenuGrid = (GridView) findViewById(R.id.gv_buttom_menu);
bottomMenuGrid.setBackgroundResource(R.drawable.channelgallery_bg);// 设置背景
bottomMenuGrid.setNumColumns(5);// 设置每行列数
bottomMenuGrid.setGravity(Gravity.CENTER);// 位置居中
bottomMenuGrid.setVerticalSpacing(10);// 垂直间隔
bottomMenuGrid.setHorizontalSpacing(10);// 水平间隔
bottomMenuGrid.setAdapter(getMenuAdapter(bottom_menu_itemName,
bottom_menu_itemSource));// 设置菜单Adapter
/** 监听底部菜单选项 **/
bottomMenuGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
switch (arg2) {
case 0: {
if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
}
if(bottomMenuGrid.getVisibility() == View.VISIBLE) {
bottomMenuGrid.setVisibility(View.GONE);
}
Intent intent = new Intent(Main.this,AddNew.class);
startActivityForResult(intent, 3);
break;
}
case 1:
loadSearchLinearout();
if(searchLinearout.getVisibility()==View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
} else {
searchLinearout.setVisibility(View.VISIBLE);
et_search.requestFocus();
et_search.selectAll();
}
break;
case 2:
if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
}
if(deleteId == null || deleteId.size() == 0) {
Toast.makeText(Main.this, " 没有标记任何记录\n长按一条记录即可标记", Toast.LENGTH_LONG).show();
} else {
new AlertDialog.Builder(Main.this)
.setTitle("确定要删除标记的" deleteId.size() "条记录吗?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DBHelper helper = new DBHelper(Main.this);
helper.deleteMarked(deleteId);
//重置视图
list = helper.getAllUser(privacy);
adapter =
new SimpleAdapter(
Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);
deleteId.clear();
}
})
.setNegativeButton("取消", null)
.create()
.show() ;
}
break;
case 3:
if(searchLinearout != null && searchLinearout.getVisibility()==View.VISIBLE) {
searchLinearout.setVisibility(View.GONE);
}
loadMainMenuDialog();
mainMenuDialog.show();
break;
case 4:
finish();
break;
}
}
});
}
}
private void loadMainMenuDialog() {
if(mainMenuDialog == null) {
LayoutInflater li = LayoutInflater.from(this);
mainMenuView = li.inflate(R.layout.main_menu_grid, null);
//根据主菜单视图,创建主菜单对话框
mainMenuDialog = new AlertDialog.Builder(this).setView(mainMenuView).create();
//根据主菜单视图,拿到视图文件中的GridView,然后再往里面放Adapter
mainMenuGrid = (GridView)mainMenuView.findViewById(R.id.gridview);
SimpleAdapter menuAdapter = getMenuAdapter(main_menu_itemName, main_menu_itemSource);
mainMenuGrid.setAdapter(menuAdapter);
//响应点击事件
mainMenuGrid.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
switch(arg2){
case 0:{
DBHelper helper = new DBHelper(Main.this);
list = helper.getAllUser(privacy);
adapter = new SimpleAdapter(
Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);//显示所有数据
mainMenuDialog.dismiss();
break;
}
case 1:{
AlertDialog.Builder builder = new AlertDialog.Builder(Main.this);
confirmDialog = builder.create();
builder.setTitle("是否删除所有!?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DBHelper helper = new DBHelper(Main.this);
helper.deleteAll(0);
list = helper.getAllUser(privacy);
adapter = new SimpleAdapter(
Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);//显示所有数据
mainMenuDialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
confirmDialog.dismiss();
}
});
builder.create().show();
break;
}
case 2:{
mainMenuDialog.dismiss();
new AlertDialog.Builder(Main.this)
.setTitle("是否需要备份记录到SD卡?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
LayoutInflater li = LayoutInflater.from(Main.this);
View backup_view = li.inflate(R.layout.backup_progress, null);
progressDialog = new AlertDialog.Builder(Main.this)
.setTitle("备份正在进行中...")
.setView(backup_view)
.create();
progressDialog.show();
DBHelper helper = new DBHelper(Main.this);
helper.backupData(privacy);
ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);
Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);
bar.setMax(list.size());
for(int i=0;i<=list.size();i ) {
bar.setProgress(i);
}
progressDialog.setTitle("备份完成!一共 " list.size() " 条记录!");
btn_backup_ok.setVisibility(View.VISIBLE);
btn_backup_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
progressDialog.dismiss();
mainMenuDialog.dismiss();
}
});
}
})
.setNegativeButton("取消", null)
.create()
.show() ;
break;
}
case 3:{
LayoutInflater li = LayoutInflater.from(Main.this);
View enterFileNameView = li.inflate(R.layout.enterfilename, null);
enterFileNameDialog = new AlertDialog.Builder(Main.this)
.setView(enterFileNameView).setNegativeButton("取消", null)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DBHelper helper = new DBHelper(Main.this);
fileName = et_enter_file_name.getText().toString();
if(helper.findFile(fileName)){
new AlertDialog.Builder(Main.this).setTitle("请选择方式:")
.setPositiveButton("覆盖", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DBHelper helper = new DBHelper(Main.this);
helper.deleteAll(0);
helper.restoreData(fileName);
list = helper.getAllUser(privacy);
adapter = new SimpleAdapter(Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
LayoutInflater li = LayoutInflater.from(Main.this);
View backup_view = li.inflate(R.layout.backup_progress, null);
progressDialog = new AlertDialog.Builder(Main.this)
.setTitle("正在还原数据...")
.setView(backup_view)
.create();
progressDialog.show();
ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);
Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);
bar.setMax(list.size());
for(int i=0;i<=list.size();i ) {
bar.setProgress(i);
}
progressDialog.setTitle("还原完成!一共还原了 " list.size() " 条记录!");
btn_backup_ok.setVisibility(View.VISIBLE);
btn_backup_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
progressDialog.dismiss();
mainMenuDialog.dismiss();
if(list.size() != 0) {
mainLinearLayout.setBackgroundDrawable(null);
}
lv.setAdapter(adapter);
}
});
}
})
.setNegativeButton("添加", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DBHelper helper = new DBHelper(Main.this);
int preNum = list.size();
helper.restoreData(fileName);
list = helper.getAllUser(privacy);
adapter = new SimpleAdapter(Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
LayoutInflater li = LayoutInflater.from(Main.this);
View backup_view = li.inflate(R.layout.backup_progress, null);
progressDialog = new AlertDialog.Builder(Main.this)
.setTitle("正在还原数据...")
.setView(backup_view)
.create();
progressDialog.show();
ProgressBar bar = (ProgressBar) backup_view.findViewById(R.id.pb_backup);
Button btn_backup_ok = (Button)backup_view.findViewById(R.id.btn_backuup_ok);
bar.setMax(list.size());
for(int i=0;i<=list.size();i ) {
bar.setProgress(i);
}
progressDialog.setTitle("还原完成!一共还原了 " (list.size()-preNum) " 条记录!");
btn_backup_ok.setVisibility(View.VISIBLE);
btn_backup_ok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
progressDialog.dismiss();
mainMenuDialog.dismiss();
lv.setAdapter(adapter);
}
});
}
})
.setNeutralButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
}).create().show();
} else {
Toast.makeText(enterFileNameDialog.getContext(), "找不到备份文件!", Toast.LENGTH_LONG).show();
}
}
})
.create();
et_enter_file_name = (EditText)enterFileNameView.findViewById(R.id.et_enter_file_name);
et_enter_file_name.setText("comm_data");
et_enter_file_name.requestFocus();
et_enter_file_name.selectAll();
enterFileNameDialog.show();
adapter = new SimpleAdapter(
Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(adapter);//显示所有数据
mainMenuDialog.dismiss();
break;
}
case 4:{
mainMenuDialog.dismiss();
new AlertDialog.Builder(Main.this)
.setTitle("是否进入私人空间?")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//新建一个activity出来
LayoutInflater li = LayoutInflater.from(Main.this);
loginView = li.inflate(R.layout.login, null);
Button btn_login_ok = (Button)loginView.findViewById(R.id.btn_login_ok);
Button btn_login_cancel = (Button)loginView.findViewById(R.id.btn_login_cancel);
final EditText et_account = (EditText)loginView.findViewById(R.id.et_account);
final EditText et_password = (EditText)loginView.findViewById(R.id.et_password);
btn_login_ok.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
if(et_account.getText().toString().equals("admin") && et_password.getText().toString().equals("123")) {
et_account.setText("");
et_password.setText("");
loginDialog.dismiss();
Intent intent = new Intent(Main.this,MainPrivacy.class);
startActivity(intent);
} else {
Toast.makeText(Main.this, "登录失败!", Toast.LENGTH_LONG).show();
}
}
});
btn_login_cancel.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
loginDialog.dismiss();
}
});
if(loginDialog == null) {
loginDialog = new AlertDialog.Builder(Main.this).setView(loginView).create();
}
loginDialog.show();
}
})
.setNegativeButton("取消", null)
.create()
.show() ;
break;
}
case 5:{
mainMenuDialog.dismiss();
break;
}
}
}});
}
}
private void loadSearchLinearout() {
if(searchLinearout == null) {
searchLinearout = (LinearLayout) findViewById(R.id.ll_search);
et_search = (EditText)findViewById(R.id.et_search);
et_search.setOnKeyListener(new OnKeyListener(){
public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
String condition = et_search.getText().toString();
if(condition.equals("")) {
lv.setAdapter(adapter);
}
DBHelper helper = new DBHelper(Main.this);
list = helper.getUsers(condition,privacy);
SimpleAdapter searchAdapter =
new SimpleAdapter(
Main.this,
list,
R.layout.listitem,
new String[]{"imageid","name","mobilephone"},
new int[]{R.id.user_image,R.id.tv_name,R.id.tv_mobilephone});
lv.setAdapter(searchAdapter); //将整合好的adapter交给listview,显示给用户看
if(list.size() == 0) {
Drawable nodata_bg = getResources().getDrawable(R.drawable.nodata_bg);
mainLinearLayout.setBackgroundDrawable(nodata_bg);
setTitle("没有查到任何数据!");
} else {
setTitle( "共查到 " list.size() " 条记录:");
mainLinearLayout.setBackgroundDrawable(null);
}
return false;
}});
}
}
private SimpleAdapter getMenuAdapter(String[] menuNameArray,
int[] imageResourceArray) {
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < menuNameArray.length; i ) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("itemImage", imageResourceArray[i]);
map.put("itemText", menuNameArray[i]);
data.add(map);
}
SimpleAdapter simperAdapter =
new SimpleAdapter(
this,
data,
R.layout.item_menu,
new String[] { "itemImage", "itemText" },
new int[] { R.id.item_image, R.id.item_text });
return simperAdapter;
}
/**
* 当退出的时候,回收资源
*/
protected void onDestroy() {
if(confirmDialog != null) {
confirmDialog = null;
}
if(mainMenuDialog != null) {
mainMenuDialog = null;
}
if(searchLinearout != null) {
searchLinearout = null;
}
if(mainMenuView != null) {
mainMenuView = null;
}
if(mainMenuGrid != null) {
mainMenuGrid = null;
}
if(bottomMenuGrid != null) {
bottomMenuGrid = null;
}
if(adapter != null) {
adapter = null;
}
if(list != null) {
list = null;
}
if(lv != null) {
lv = null;
}
if(DBHelper.dbInstance != null) {
DBHelper.dbInstance.close();
DBHelper.dbInstance = null;
}
System.out.println("destory!!!");
super.onDestroy();
}
}