项目要求
项目源码地址
码云仓库地址:https://gitee.com/si–yue/WeiXinApplication
项目过程
- 目录结构
-
界面总体设计见前面的博客https://blog.csdn.net/qq_44744670/article/details/105181254
,此次需要完善通讯录界面,则在通讯录的.xml文件中加入控件进行操作。 -
在top.xml中加一个ImageButton,同时LinearLayout的orientation属性改为horizontal。并且新增一个add_contact.xml布局文件,再点击ImageButton之后以一个对话框的形式显示出来。
-
编写事件监听控制文件contactFragment.java,数据的获取要从库中调通讯录中的联系人和联系电话。大致代码:
private void initexpandData(){
Uri uri= ContactsContract.Contacts.CONTENT_URI;
ContentResolver resolver = context.getContentResolver();
Cursor cursor=resolver.query(uri, null, null, null, null); //得到记录集
if(cursor!=null){
while(cursor.moveToNext()){
//先获取联系人_id字段的索引号后再获取_id值
int idFieldIndex=cursor.getColumnIndex("_id");
int id=cursor.getInt(idFieldIndex);
//先获取联系人姓名字段的索引号后再获取姓名字段值
int nameFieldIndex = cursor.getColumnIndex("display_name");
String name=cursor.getString(nameFieldIndex);
int numCountFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int numCount=cursor.getInt(numCountFieldIndex); //获取联系人的电话号码个数
String phoneNumber="";
if(numCount>0){ //联系人有至少一个电话号码
//在类ContactsContract.CommonDataKinds.Phone中根据id查询相应联系人的所有电话;
Cursor phonecursor=getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?",
new String[]{Integer.toString(id)}, null);
if(phonecursor!=null){
if(phonecursor.moveToFirst()){ //仅读取第一个电话号码
int numFieldIndex=phonecursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
phoneNumber=phonecursor.getString(numFieldIndex);
}
phonecursor.close();
}
}
item=new HashMap<String,String>(); //必须循环创建
item.put("name", name);
item.put("phoneNumber", phoneNumber);
data.add(item);
}
cursor.close();
}
}
- 在MainActivity.java中完善逻辑控制,核心代码如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
userAccounts=new ArrayList<>();
myAdapter=new MyAdapter(this,userAccounts);
recyclerView=findViewById(R.id.recycleview);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(myAdapter);
initView();
initFragment();
selectfragment(0);
intEvent();
initList();
initData();
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
View view1= LayoutInflater.from(MainActivity.this).inflate(R.layout.dialogview,null,false);
final EditText edusername=view1.findViewById(R.id.ed_username);
final EditText edpassword=view1.findViewById(R.id.ed_password);
new AlertDialog.Builder(MainActivity.this)
.setTitle("用户信息输入")
.setView(view1)
.setPositiveButton("添加", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
UserAccount userAccount=new UserAccount();
userAccount.setUsername(edusername.getText().toString().trim());
userAccount.setPassword(edpassword.getText().toString().trim());
userAccounts.add(userAccount);
myAdapter.notifyDataSetChanged();
}
}).setNegativeButton("取消",null).show();
}
});
}