矽谷社交15--群詳情,矽谷社交15--
1)頁面配置
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <com.hyphenate.easeui.widget.EaseTitleBar app:titleBarTitle="群詳情" android:layout_width="match_parent" android:layout_height="wrap_content"> </com.hyphenate.easeui.widget.EaseTitleBar> <GridView android:id="@+id/gv_group_detail" android:layout_width="match_parent" android:numColumns="4" android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:layout_weight="1" android:layout_height="0dp"> </GridView> <Button android:id="@+id/bt_group_detail" android:text="退群" android:textSize="25sp" android:layout_margin="5dp" android:textColor="@android:color/white" android:background="@android:color/holo_red_light" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
群主群詳情.png
刪除模式群詳情.png
群成員群詳情.png
2)擷取傳遞過來的資料
// 擷取傳遞過來的參數private void getData() {// 擷取傳遞過來的群idString groupId = getIntent().getStringExtra(Constant.GROUP_ID);// 校正if (groupId == null) {finish();return;} else {// 擷取群資訊mGroup = EMClient.getInstance().groupManager().getGroup(groupId);}}
3)初始化button按鈕的顯示
// 初始化按鈕的顯示private void initButtonDisplay() {//顯示// 判斷是否是群主if (EMClient.getInstance().getCurrentUser().equals(mGroup.getOwner())) {// 更新顯示btn_exit_group.setText("解散群");// 解散群的點擊事件btn_exit_group.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Model.getInstace().getGolbalThreadPool().execute(new Runnable() {@Overridepublic void run() {// 連網try {// 連網成功EMClient.getInstance().groupManager().destroyGroup(mGroup.getGroupId());// 發送解散群廣播exitGroupBroadCast();// 提示runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "解散群成功", Toast.LENGTH_SHORT).show();// 銷毀當前頁面finish();}});} catch (HyphenateException e) {e.printStackTrace();// 提示runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "解散群失敗", Toast.LENGTH_SHORT).show();}});}}});}});} else {// 群成員btn_exit_group.setText("退群");// 退群按鈕點擊事件btn_exit_group.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// 連網Model.getInstace().getGolbalThreadPool().execute(new Runnable() {@Overridepublic void run() {try {EMClient.getInstance().groupManager().leaveGroup(mGroup.getGroupId());// 發送廣播exitGroupBroadCast();// 提示runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "退群成功", Toast.LENGTH_SHORT).show();// 銷毀當前頁面finish();}});} catch (HyphenateException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "退群失敗", Toast.LENGTH_SHORT).show();}});}}});}});}}
4)退群和解散群
發送退群廣播
// 解散群和退群廣播private void exitGroupBroadCast() {// 發送廣播Intent intent = new Intent(Constant.EXIT_GROUP);// 傳遞群id參數intent.putExtra(Constant.GROUP_ID, mGroup.getGroupId());// 發送mLBM.sendBroadcast(intent);}
5)初始化Gridview
// 初始化gridviewprivate void initGridview() {// 你是群主 或者 你這個群是公開 你就可以添加和刪除群成員boolean mIsCanModify = EMClient.getInstance().getCurrentUser().equals(mGroup.getOwner()) || mGroup.isPublic();// 建立適配器mGroupDetailAdapter = new GroupDetailAdapter(GroupDetailActivity.this, mIsCanModify, mOnGroupDetailListener);// 添加到gridviewgv_member_list.setAdapter(mGroupDetailAdapter);}
6)GridView適配器
public class GroupDetailAdapter extends BaseAdapter { private Context mContext; private boolean mIsCanModify; // 表示可以添加和移除朋友 private boolean mIsDeleteModel; // 是否是刪除模式 true:刪除模式 false:非刪除模式 private List<UserInfo> mUsers = new ArrayList<>(); private OnGroupDetailListener mOnGroupDetailListener; private final String mCurrentUser; public GroupDetailAdapter(Context context, boolean isCanModify, OnGroupDetailListener onGroupDetailListener) { mContext = context; mIsCanModify = isCanModify; mOnGroupDetailListener = onGroupDetailListener; mCurrentUser = EMClient.getInstance().getCurrentUser(); } private void initUsers() { UserInfo add = new UserInfo("add"); UserInfo delete = new UserInfo("delete"); mUsers.add(delete); mUsers.add(0, add); } // 重新整理的方法 public void refresh(List<UserInfo> users) { // 校正 if (users != null && users.size() >= 0) { mUsers.clear(); initUsers(); mUsers.addAll(0, users); } // 重新整理頁面 notifyDataSetChanged(); } // 擷取當前的模式 public boolean ismIsDeleteModel() { return mIsDeleteModel; } // 設定當前的模式 public void setmIsDeleteModel(boolean mIsDeleteModel) { this.mIsDeleteModel = mIsDeleteModel; } @Override public int getCount() { return mUsers == null ? 0 : 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) { // 建立或擷取viewHolder ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.item_group_detail, null); holder.photo = (ImageView) convertView.findViewById(R.id.iv_member_photo); holder.name = (TextView) convertView.findViewById(R.id.tv_member_name); holder.delete = (ImageView) convertView.findViewById(R.id.iv_member_delete); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); if (position != getCount() - 1 && position != getCount() - 2) { if (holder.name.getVisibility() == View.INVISIBLE) { holder = new ViewHolder(); convertView = View.inflate(mContext, R.layout.item_group_detail, null); holder.photo = (ImageView) convertView.findViewById(R.id.iv_member_photo); holder.name = (TextView) convertView.findViewById(R.id.tv_member_name); holder.delete = (ImageView) convertView.findViewById(R.id.iv_member_delete); convertView.setTag(holder); } } } // 顯示資料 // 判斷是否有修改的許可權 if (mIsCanModify) {// 修改模式 // 1 監聽事件 if (position == getCount() - 1) {// 減號位置 holder.photo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 如果當前是非刪除模式 if (!mIsDeleteModel) { // 修改為刪除模式 mIsDeleteModel = true; // 更新顯示 notifyDataSetChanged(); } } }); } else if (position == getCount() - 2) {// 加號位置 holder.photo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 邏輯複雜 不再這操作 mOnGroupDetailListener.onAddMembers(); } }); } else {// 群成員的點擊事件 holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 不再這操作 mOnGroupDetailListener.onDeleteMember(mUsers.get(position)); } }); } // 2 顯示布局 if (position == getCount() - 1) {// 減號 if (mIsDeleteModel) { convertView.setVisibility(View.INVISIBLE); } else { convertView.setVisibility(View.VISIBLE); // 設定資料 holder.photo.setImageResource(R.drawable.em_smiley_minus_btn_pressed); holder.delete.setVisibility(View.GONE); holder.name.setVisibility(View.INVISIBLE); } } else if (position == getCount() - 2) {// 加號 if (mIsDeleteModel) { convertView.setVisibility(View.INVISIBLE); } else { convertView.setVisibility(View.VISIBLE); holder.photo.setImageResource(R.drawable.em_smiley_add_btn_pressed); holder.delete.setVisibility(View.GONE); holder.name.setVisibility(View.INVISIBLE); } } else { // 擷取當前item資料 UserInfo user = mUsers.get(position); convertView.setVisibility(View.VISIBLE); holder.name.setVisibility(View.VISIBLE); holder.photo.setVisibility(View.VISIBLE); holder.name.setText(user.getName()); holder.photo.setImageResource(R.drawable.em_default_avatar); if (mIsDeleteModel && !mCurrentUser.equals(user.getHxId())) { // 布局設定 holder.delete.setVisibility(View.VISIBLE); } else { holder.delete.setVisibility(View.GONE); } } } else { // 展示資料 if (position == getCount() - 1 || position == getCount() - 2) { convertView.setVisibility(View.INVISIBLE); } else { convertView.setVisibility(View.VISIBLE); // 擷取當前item資料 UserInfo userInfo = mUsers.get(position); holder.name.setText(userInfo.getName()); holder.photo.setImageResource(R.drawable.em_default_avatar); holder.delete.setVisibility(View.GONE); } } // 返回view return convertView; } static class ViewHolder { TextView name; ImageView photo; ImageView delete; } public interface OnGroupDetailListener { // 新增成員的方法 void onAddMembers(); // 刪除群成員方法 void onDeleteMember(UserInfo user); }}
7)從環信伺服器擷取所有群成員
private void getMembersFromHxServer() { Modle.getInstance().getGlobalThreadPool().execute(new Runnable() { @Override public void run() { try { EMGroup groupFromServer = EMClient.getInstance().groupManager().getGroupFromServer(mGroup.getGroupId()); List<String> members = groupFromServer.getMembers(); if(members != null && members.size() >=0) { mUserss = new ArrayList<UserInfo>(); for (String member:members){ UserInfo userInfo = new UserInfo(member); mUserss.add(userInfo); } } runOnUiThread(new Runnable() { @Override public void run() { mGroupDetailAdapter.refresh(mUserss);// Toast.makeText(GroupDetailAcitivity.this, "載入成功", Toast.LENGTH_SHORT).show(); } }); } catch (HyphenateException e) { e.printStackTrace(); } } }); }
8)GridView適配器回調介面
(1)刪除群成員
Model.getInstace().getGolbalThreadPool().execute(new Runnable() {@Overridepublic void run() {try {// 從環信伺服器中刪除該成員EMClient.getInstance().groupManager().removeUserFromGroup(group.getGroupId(),user.getHxId() );// 從環信伺服器再次擷取群成員,並重新整理頁面getUsersFromHxServer();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "刪除該成員成功", Toast.LENGTH_SHORT).show();}});} catch (HyphenateException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "刪除該成員失敗", Toast.LENGTH_SHORT).show();}});}}});
(2)添加群成員
public void onAddMembers() {// 跳轉到選擇連絡人頁面Intent intent = new Intent(GroupDetailActivity.this, PickContactsActivity.class);intent = intent.putExtra(Constant.GROUP_ID, group.getGroupId());startActivityForResult(intent, 0);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(resultCode == RESULT_OK) {// 擷取返回的連絡人資訊final String[] memberses = data.getStringArrayExtra("members");Model.getInstace().getGolbalThreadPool().execute(new Runnable() {@Overridepublic void run() {try {// 添加群成員到該群組EMClient.getInstance().groupManager().addUsersToGroup(group.getGroupId(), memberses);// 訪問伺服器重新整理頁面// getUsersFromHxServer();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "發送加入該群邀請成功", Toast.LENGTH_SHORT).show();}});} catch (HyphenateException e) {e.printStackTrace();runOnUiThread(new Runnable() {@Overridepublic void run() {Toast.makeText(GroupDetailActivity.this, "發送加入該群邀請失敗", Toast.LENGTH_SHORT).show();}});}}});}}