xmpp 如何添加全部好友(使用了listview + checkbox)技术

/** * 添加好友,可以单个添加,也可以选择多个添加 * * @author chen.lin * */

 public class IMAddFriend extends Activity implements OnClickListener { 

protected static final int LOAD_ERROR = 0; 

protected static final int IS_NULL = 1; protected static final int LOAD_SUCCESS = 2; private ImageButton title_back, btn_queryfriend; private EditText et_queryfriend; private Button btn_main; private ListView listView; private List imUsers; private List users; private XMPPConnection connection; private FriendAdapter mAdapter; private IMUserManager userManager; private LinearLayout im_ll_addall, im_ll_add, im_ll_cancel, im_ll_add_back; private int checkNum = 0; private List rGroups; private HashMap selectMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.im_addfriend); // 初始化一些数据 init(); } private void init() { selectMap = new HashMap(); connection = XmppManager.getInstance().getConnection(); rGroups = IMContactManager.getGroups(connection.getRoster()); userManager = IMUserManager.getInstance(this); title_back = (ImageButton) this.findViewById(R.id.title_back); btn_queryfriend = (ImageButton) this.findViewById(R.id.btn_queryfriend); et_queryfriend = (EditText) this.findViewById(R.id.et_queryfriend); btn_main = (Button) this.findViewById(R.id.btn_main); listView = (ListView) this.findViewById(R.id.listview_addfriend); im_ll_addall = (LinearLayout) this.findViewById(R.id.im_ll_addall); im_ll_add = (LinearLayout) this.findViewById(R.id.im_ll_add); im_ll_cancel = (LinearLayout) this.findViewById(R.id.im_ll_cancel); im_ll_add_back = (LinearLayout) this.findViewById(R.id.im_ll_add_back); btn_queryfriend.setOnClickListener(this); btn_main.setOnClickListener(this); title_back.setOnClickListener(this); im_ll_addall.setOnClickListener(this); im_ll_add.setOnClickListener(this); im_ll_cancel.setOnClickListener(this); im_ll_add_back.setOnClickListener(this); } /** * 处理一些消息事件 */ private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case LOAD_SUCCESS: users = new ArrayList(); // 把数据重新封装到users中 for (IMUser imUser : imUsers) { User u = new User(); u.jid = imUser.getJID(); u.userName = imUser.getName(); u.mail = imUser.getEmail(); VCard vCard = userManager.getUserVCard(imUser.getJID()); u.depName = vCard.getOrganizationUnit(); u.tel = vCard.getPhoneWork(Constant.MOBILE); byte[] data = vCard.getAvatar(); if (data != null && data.length > 0) { u.headIcon = BitmapFactory.decodeByteArray(data, 0, data.length); } u.sex = vCard.getField(Constant.SEX); users.add(u); } mAdapter = new FriendAdapter(users); mAdapter.notifyDataSetChanged(); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new FriendItemClickListener()); break; case LOAD_ERROR: Toast.makeText(IMAddFriend.this, "用户不存在", 1).show(); break; case IS_NULL: Toast.makeText(IMAddFriend.this, "搜索词不能为空", 1).show(); break; default: break; } }; }; class ViewHolder { ImageView iv; TextView tv1; TextView tv2; TextView tv3; CheckBox cb; } /** * ListView点击事件 * * @author chen.lin * */ private class FriendItemClickListener implements OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { ViewHolder holder = (ViewHolder) view.getTag(); // 改变CheckBox的状态 holder.cb.toggle(); // 将CheckBox的选中状况记录下来 selectMap.put(position, holder.cb.isChecked() ); // 调整选定条目 if (holder.cb.isChecked() == true) { checkNum++; } else { checkNum--; } } } /** * 用户信息适配器 * * @author chen.lin * */ private class FriendAdapter extends BaseAdapter { private LayoutInflater mInflater; private List mUsers; public FriendAdapter(List users) { mUsers = users; mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); for (int i = 0; i < mUsers.size(); i++) { //初始化所有的条目为没被选中 selectMap.put(i, false); } } @Override public int getCount() { return mUsers.size(); } @Override public Object getItem(int position) { return mUsers.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { User user = mUsers.get(position); ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.im_friend_item, parent, false); holder.iv = (ImageView) convertView.findViewById(R.id.im_iv_friend_head); holder.tv1 = (TextView) convertView.findViewById(R.id.im_tv_friend_name); holder.tv2 = (TextView) convertView.findViewById(R.id.im_tv_friend_department); holder.tv3 = (TextView) convertView.findViewById(R.id.im_tv_friend_tel); holder.cb = (CheckBox) convertView.findViewById(R.id.im_checkbox_friend); holder.cb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CheckBox cb = (CheckBox)v; selectMap.put(position, cb.isChecked()); checkNum ++; } }); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } // 设置头像 if (mUsers.get(position).headIcon != null) { holder.iv.setImageBitmap(mUsers.get(position).headIcon); } else { String sex = mUsers.get(position).sex; if (!TextUtils.isEmpty(sex) && Constant.GIRL.equals(sex)) { holder.iv.setImageResource(R.drawable.im_head_girl); } } holder.tv1.setText(mUsers.get(position).userName); if (mUsers.get(position).depName == null) { mUsers.get(position).depName = ""; } holder.tv2.setText("部门:" + mUsers.get(position).depName); if (mUsers.get(position).tel == null) { mUsers.get(position).tel = ""; } holder.tv3.setText("手机:" + mUsers.get(position).tel); //初始化被选中的选项 holder.cb.setChecked(selectMap.get(position)); return convertView; } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.title_back: finish(); break; case R.id.btn_queryfriend: queryFriend(); break; case R.id.btn_main: // showAllFriend(); Intent intent = new Intent(IMAddFriend.this, IMContacterMainActivity.class); startActivity(intent); finish(); break; case R.id.im_ll_addall: addAllFriend(); break; case R.id.im_ll_add: addFriend(); break; case R.id.im_ll_add_back: addBackFriend();// 返选添加 break; case R.id.im_ll_cancel: cancelFriend(); break; default: break; } } private void addBackFriend() { // 遍历list的长度,将已选的设为未选,未选的设为已选 for (int i = 0; i < users.size(); i++) { if (selectMap.get(i)) { selectMap.put(i, false); checkNum--; } else { selectMap.put(i, true); checkNum++; } } mAdapter.notifyDataSetChanged(); } /** * 取消选中的好友 */ private void cancelFriend() { // 遍历list的长度,将已选的按钮设为未选 for (int i = 0; i < users.size(); i++) { if (selectMap.get(i)) { selectMap.put(i, false); checkNum--;// 数量减1 } } mAdapter.notifyDataSetChanged(); } /** * 添加所有选中的好友 */ private void addFriend() { for (User user : users) { if (isExitJid(StringUtil.getJidByName(user.getUserName()), rGroups)) { Toast.makeText(this, getResources().getString(R.string.username_exist),1).show(); return; } try { connection.getRoster().createEntry(StringUtil.getJidByName(user.getUserName()), null, null); } catch (XMPPException e) { } } finish(); } /** * 判断用户名是否存在 * @param userName * @param groups * @return */ protected boolean isExitJid(String userJid, List groups) { for (MRosterGroup g : groups) { List users = g.getUsers(); if (users != null && users.size() > 0) { for (IMUser u : users) { if (u.getJID().equals(userJid)) { return true; } } } } return false; } private void addAllFriend() { // 遍历list的长度,将ListViewAdapter中的map值全部设为true for (int i = 0; i < users.size(); i++) { selectMap.put(i, true); } checkNum = users.size(); mAdapter.notifyDataSetChanged(); } /** * 查询用户信息 */ private void queryFriend() { final String username = et_queryfriend.getText().toString().trim(); new Thread() { public void run() { Message msg = Message.obtain(); if (!TextUtils.isEmpty(username)) { imUsers = IMUserManager.findUsers(username, connection); if (imUsers.size() > 0) { msg.what = LOAD_SUCCESS; } else { msg.what = LOAD_ERROR; } } else { msg.what = IS_NULL; } mHandler.sendMessage(msg); }; }.start(); } /** * 显示所有用户 信息 */ private void showAllFriend() { new Thread() { public void run() { Message msg = Message.obtain(); imUsers = IMUserManager.findUsers("", connection); if (imUsers.size() > 0) { msg.what = LOAD_SUCCESS; } else { msg.what = LOAD_ERROR; } mHandler.sendMessage(msg); }; }.start(); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值