1.可以发短信,打电话
2.能够调用数据库对数据进行保存 3. 有很好的图片背景 4.有很好的界面切换效果
总体设计
Add 按钮 主界面(Contacts Activity) Image按钮 LinearLayout(联系人和号码) edit按钮 通过intent 添加界面 进行切换 通过intent进行切换 通过intent进行切换 通过intent进行切换
检测其他程序的图库 (AddContact activity) 单击:selection Activity 长按:编辑和删除菜单 添加界面 (AddContact activity) 详细设计
首先是登陆页面的设计,其界面效果如下图:
编码实现
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.list_item);
DatabaseHelper dbh = new DatabaseHelper(this,\"Information\"); db = dbh.getWritableDatabase();
cursor = db.query(\"contact\", new String[]{\"name\",\"mobile\",\"uri\"}, null, null, null, null, null);
cursor.moveToFirst();
System.out.println(\"-------count-------\"+cursor.getCount()+\"-------\"
list = new ArrayList ); //启用长按支持,弹出的上下文菜单在 getListView().setOnCreateContextMenuListener(this); while(cursor.moveToNext()) { String n = cursor.getString(cursor.getColumnIndex(\"name\")); String m = cursor.getString(cursor.getColumnIndex(\"mobile\")); String u = cursor.getString(cursor.getColumnIndex(\"uri\")); HashMap System.out.print(\"is not null\"); Uri uri = Uri.parse(u); ContentResolver cr = this.getContentResolver(); try{ Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); map.put(\"image\", bitmap); }catch(FileNotFoundException e){ e.printStackTrace(); } } else map.put(\"image\", BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); list.add(map); } System.out.println(\"---------------oncreate--------------\"); System.out.println(\"-----listnum---\"+ list.size()+\"-----\"); listAdapter = new MySimpleAdapter(this,list,R.layout.data, new String[]{\"image\",\"name\",\"mobile\"},new int[]{R.id.image,R.id.name,R.id.mobile}); setListAdapter(listAdapter); addcontact = (Button)findViewById(R.id.addcontact); addcontact.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent intent = new Intent(); intent.setClass(Contacts.this, AddContact.class); Contacts.this.startActivity(intent); } }); } public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { return; } cursor.moveToPosition(info.position); if (cursor == null) { System.out.println(\"------cursor = null ---------\"); return; } 添加联系人界面如下图: 编码实现: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_add_contact); setContentView(R.layout.dialog_item); editname = (EditText)findViewById(R.id.editname); editmobile = (EditText)findViewById(R.id.editmobile); confirm = (Button)findViewById(R.id.confirm); cancel = (Button)findViewById(R.id.cancel); isnew = true; intent = getIntent(); if(intent.getStringExtra(\"name\") != null) { isnew = false; editname.setText(intent.getStringExtra(\"name\")); editmobile.setText(intent.getStringExtra(\"mobile\")); } confirm.setOnClickListener(new OnClickListener(){ public void onClick(View v){ System.out.println(\"------editname------\"+editname.getText().toString()); if(editname.length() != 0 && editmobile.length() != 0) { dbh = new DatabaseHelper DatabaseHelper(AddContact.this,\"Information\"); SQLiteDatabase db = dbh.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(\"name\", editname.getText().toString()); values.put(\"mobile\", editmobile.getText().toString()); new HashMap map.put(\"name\", editname.getText().toString()); map.put(\"mobile\", editmobile.getText().toString()); map.put(\"image\", BitmapFactory.decodeResource(getResources(), R.drawable.contact_add_normal)); if(isnew) { System.out.println(\"-----insert----\"+isnew); db.insert(\"contact\", null, values); Contacts.list.add(map); } else { Bundle bn = intent.getExtras(); String ss = bn.getString(\"data\"); System.out.println(\"-----position=\"+ss); int index = Integer.parseInt(ss); db.delete(\"contact\",\"name=?\",new String[]{Contacts.list.get(index).get(\"name\").toString()}); Contacts.list.remove(Contacts.list.indexOf(Contacts.list.get(index))); map.put(\"name\", editname.getText().toString()); map.put(\"mobile\", editmobile.getText().toString()); map.put(\"image\", BitmapFactory.decodeResource(getResources(), R.drawable.contact_add_normal)); Contacts.list.add(index, map); db.insert(\"contact\", null, values); Contacts.listAdapter.notifyDataSetChanged(); } setResult(RESULT_OK,(new Intent()).setAction(uid)); System.out.println(\"-----update----\"+isnew) finish(); } else { Toast.makeText(AddContact.this, \"name not null\", Toast.LENGTH_SHORT).show(); finish(); } } }); 呼叫和发短信界面如下图: 编码实现 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.select_item); personalmsg = (TextView)findViewById(R.id.personalmsg); call = (Button)findViewById(R.id.call); send = (Button)findViewById(R.id.send); s_cancel = (Button)findViewById(R.id.s_cancel); intent = getIntent(); personalmsg.setText(intent.getStringExtra(\"name\")+\":\"+intent.getStringExtra(\"mobile\")); call.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent call_intent = new Intent(Intent.ACTION_CALL,Uri.parse(\"tel:\"+intent.getStringExtra(\"mobile\"))); Selection.this.startActivity(call_intent); finish(); } }); send.setOnClickListener(new OnClickListener(){ public void onClick(View v){ Intent send_intent = new Intent(Intent.ACTION_SENDTO,Uri.parse(\"smsto:\"+intent.getStringExtra(\"mobile\"))); } Selection.this.startActivity(send_intent); finish(); }); s_cancel.setOnClickListener(new OnClickListener(){ public void onClick(View v){ finish(); } }); } 添加和删除界面如下图: 编码实现 public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { AdapterView.AdapterContextMenuInfo info; try { info = (AdapterView.AdapterContextMenuInfo) menuInfo; } catch (ClassCastException e) { return; } cursor.moveToPosition(info.position); if (cursor == null) { System.out.println(\"------cursor = null ---------\"); return; } menu.setHeaderTitle(list.get(info.position).get(\"mobile\").toString()); menu.add(0, 1, 0, R.string.addcontact); menu.add(0, 2, 0, R.string.delete); } 编辑界面如下图: 编码实现: isnew = true; intent = getIntent(); if(intent.getStringExtra(\"name\") != null) { isnew = false; } editname.setText(intent.getStringExtra(\"name\")); editmobile.setText(intent.getStringExtra(\"mobile\")); 关键技术 1.实现对数据库的操作,是的数据能够保存在手机了。 2.使用了listview的类,从而能够动态的添加数据并显示出来。 3.通过intent的过滤器功能默认对图片进行搜索,并插入图片作为联系人的头像 总结 通过本次android的课程设计,真实切身体会到android得伟大之处,前景之广,不言而喻。 刚开始由于在代码规范方面做的不好,代码都是按自己的喜好去写,当系统出了问题,去修改的时候,那可是一个头大啊,问题在哪儿,是常说的一句话,但是问题在哪儿,才是真正的问题,由于没有一个好的代码规范,致使问题在眼前也视而不见,是可悲,是无奈,没有好的总体设计,想到什么写什么,等再想到什么就很难再写什么了,因为基础没有做好,要写一个新的功能就要改好多处久得功能,得不偿失啊。 这次课程设计让我深深的认识到,要想一步到位的完成一个软件,必须要有清晰的系统架构,合理的代码规范,同时也要有不怕困难的决心。问题谁都可以遇到,当你遇到问题时一定不可以急躁,当时解决不了,不要紧,等自己在状态了再回来看看自己的问题,那时估计已经不是什么问题,迎刃而解了,可见对待问题一定要有一个清新的头脑。 通过团组的共同努力,终于看到了成果,软件顺利的运行了,并且实现了预期的效果。 因篇幅问题不能全部显示,请点此查看更多更全内容