矽谷社交15--群詳情,矽谷社交15--

來源:互聯網
上載者:User

矽谷社交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();}});}}});}}

  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.