
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>
<ListView
android:id="@+id/lv_invite"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
</LinearLayout>
2.Listview初始化
// 創建適配器 mInviteAdapter = new InviteAdapter(this, mOnInviteListener); // 添加適配器 lv_invite.setAdapter(mInviteAdapter);
3.Listview適配器

1 public class InviteAdapter extends BaseAdapter {
2 private Context mContext;
3 private List<InvationInfo> mInvitationInfos = new ArrayList<>();
4 private OnInviteListener mOnInviteListener;
5 private InvationInfo invationInfo;
6
7 public InviteAdapter(Context context, OnInviteListener onInviteListener) {
8 mContext = context;
9
10 mOnInviteListener = onInviteListener;
11 }
12
13 // 刷新數據的方法
14 public void refresh(List<InvationInfo> invationInfos) {
15
16 if (invationInfos != null && invationInfos.size() >= 0) {
17
18 mInvitationInfos.clear();
19
20 mInvitationInfos.addAll(invationInfos);
21
22 notifyDataSetChanged();
23 }
24 }
25
26 @Override
27 public int getCount() {
28 return mInvitationInfos == null ? 0 : mInvitationInfos.size();
29 }
30
31 @Override
32 public Object getItem(int position) {
33 return mInvitationInfos.get(position);
34 }
35
36 @Override
37 public long getItemId(int position) {
38 return position;
39 }
40
41 @Override
42 public View getView(int position, View convertView, ViewGroup parent) {
43 // 1 獲取或創建viewHolder
44 ViewHodler hodler = null;
45 if (convertView == null) {
46 hodler = new ViewHodler();
47
48 convertView = View.inflate(mContext, R.layout.item_invite, null);
49
50 hodler.name = (TextView) convertView.findViewById(R.id.tv_invite_name);
51 hodler.reason = (TextView) convertView.findViewById(R.id.tv_invite_reason);
52
53 hodler.accept = (Button) convertView.findViewById(R.id.bt_invite_accept);
54 hodler.reject = (Button) convertView.findViewById(R.id.bt_invite_reject);
55
56 convertView.setTag(hodler);
57 } else {
58 hodler = (ViewHodler) convertView.getTag();
59 }
60
61 // 2 獲取當前item數據
62 invationInfo = mInvitationInfos.get(position);
63
64 // 3 顯示當前item數據
65 UserInfo user = invationInfo.getUser();
66
67 if (user != null) {// 聯系人
68 // 名稱的展示
69 hodler.name.setText(invationInfo.getUser().getName());
70
71 hodler.accept.setVisibility(View.GONE);
72 hodler.reject.setVisibility(View.GONE);
73
74 // 原因
75 if (invationInfo.getStatus() == InvationInfo.InvitationStatus.NEW_INVITE) {// 新的邀請
76
77 if (invationInfo.getReason() == null) {
78 hodler.reason.setText("添加好友");
79 } else {
80 hodler.reason.setText(invationInfo.getReason());
81 }
82
83 hodler.accept.setVisibility(View.VISIBLE);
84 hodler.reject.setVisibility(View.VISIBLE);
85
86 } else if (invationInfo.getStatus() == InvationInfo.InvitationStatus.INVITE_ACCEPT) {// 接受邀請
87
88 if (invationInfo.getReason() == null) {
89 hodler.reason.setText("接受邀請");
90 } else {
91 hodler.reason.setText(invationInfo.getReason());
92 }
93 } else if (invationInfo.getStatus() == InvationInfo.InvitationStatus.INVITE_ACCEPT_BY_PEER) {// 邀請被接受
94 if (invationInfo.getReason() == null) {
95 hodler.reason.setText("邀請被接受");
96 } else {
97 hodler.reason.setText(invationInfo.getReason());
98 }
99 }
100
101 // 按鈕的處理
102 hodler.accept.setOnClickListener(new View.OnClickListener() {
103 @Override
104 public void onClick(View v) {
105 mOnInviteListener.onAccept(invationInfo);
106 }
107 });
108
109 // 拒絕按鈕的點擊事件處理
110 hodler.reject.setOnClickListener(new View.OnClickListener() {
111 @Override
112 public void onClick(View v) {
113 mOnInviteListener.onReject(invationInfo);
114 }
115 });
116 } else {// 群組
117 // 顯示名稱
118 hodler.name.setText(invationInfo.getGroup().getInvatePerson());
119
120 hodler.accept.setVisibility(View.GONE);
121 hodler.reject.setVisibility(View.GONE);
122
123 // 顯示原因
124 switch(invationInfo.getStatus()){
125 // 您的群申請請已經被接受
126 case GROUP_APPLICATION_ACCEPTED:
127 hodler.reason.setText("您的群申請請已經被接受");
128 break;
129 // 您的群邀請已經被接收
130 case GROUP_INVITE_ACCEPTED:
131 hodler.reason.setText("您的群邀請已經被接收");
132 break;
133
134 // 你的群申請已經被拒絕
135 case GROUP_APPLICATION_DECLINED:
136 hodler.reason.setText("你的群申請已經被拒絕");
137 break;
138
139 // 您的群邀請已經被拒絕
140 case GROUP_INVITE_DECLINED:
141 hodler.reason.setText("您的群邀請已經被拒絕");
142 break;
143
144 // 您收到了群邀請
145 case NEW_GROUP_INVITE:
146 hodler.accept.setVisibility(View.VISIBLE);
147 hodler.reject.setVisibility(View.VISIBLE);
148
149 // 接受邀請
150 hodler.accept.setOnClickListener(new View.OnClickListener() {
151 @Override
152 public void onClick(View v) {
153 mOnInviteListener.onInviteAccept(invationInfo);
154 }
155 });
156
157 // 拒絕邀請
158 hodler.reject.setOnClickListener(new View.OnClickListener() {
159 @Override
160 public void onClick(View v) {
161 mOnInviteListener.onInviteReject(invationInfo);
162 }
163 });
164
165 hodler.reason.setText("您收到了群邀請");
166 break;
167
168 // 您收到了群申請
169 case NEW_GROUP_APPLICATION:
170 hodler.accept.setVisibility(View.VISIBLE);
171 hodler.reject.setVisibility(View.VISIBLE);
172
173 // 接受申請
174 hodler.accept.setOnClickListener(new View.OnClickListener() {
175 @Override
176 public void onClick(View v) {
177 mOnInviteListener.onApplicationAccept(invationInfo);
178 }
179 });
180
181 // 拒絕申請
182 hodler.reject.setOnClickListener(new View.OnClickListener() {
183 @Override
184 public void onClick(View v) {
185 mOnInviteListener.onApplicationReject(invationInfo);
186 }
187 });
188
189 hodler.reason.setText("您收到了群申請");
190 break;
191
192 // 你接受了群邀請
193 case GROUP_ACCEPT_INVITE:
194 hodler.reason.setText("你接受了群邀請");
195 break;
196
197 // 您批准了群申請
198 case GROUP_ACCEPT_APPLICATION:
199 hodler.reason.setText("您批准了群申請");
200 break;
201
202 // 您拒絕了群邀請
203 case GROUP_REJECT_INVITE:
204 hodler.reason.setText("您拒絕了群邀請");
205 break;
206
207 // 您拒絕了群申請
208 case GROUP_REJECT_APPLICATION:
209 hodler.reason.setText("您拒絕了群申請");
210 break;
211 }
212 }
213
214 // 4 返回view
215 return convertView;
216 }
217
218 private class ViewHodler {
219 private TextView name;
220 private TextView reason;
221
222 private Button accept;
223 private Button reject;
224 }
225
226
227 public interface OnInviteListener {
228 // 聯系人接受按鈕的點擊事件
229 void onAccept(InvationInfo invationInfo);
230
231 // 聯系人拒絕按鈕的點擊事件
232 void onReject(InvationInfo invationInfo);
233
234 // 接受邀請按鈕處理
235 void onInviteAccept(InvationInfo invationInfo);
236 // 拒絕邀請按鈕處理
237 void onInviteReject(InvationInfo invationInfo);
238
239 // 接受申請按鈕處理
240 void onApplicationAccept(InvationInfo invationInfo);
241 // 拒絕申請按鈕處理
242 void onApplicationReject(InvationInfo invationInfo);
243 }
244 }
InviteAdapter
4.Listview回調監聽的接口

1 private InviteAdapter.OnInviteListener mOnInviteListener = new InviteAdapter.OnInviteListener() {
2 @Override
3 public void onAccept(final InvationInfo invationInfo) {
4 // 通知環信服務器,點擊了接受按鈕
5 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
6 @Override
7 public void run() {
8 try {
9 EMClient.getInstance().contactManager().acceptInvitation(invationInfo.getUser().getHxid());
10
11 // 數據庫更新
12 Model.getInstance().getDbManager().getInviteTableDao().updateInvitationStatus(InvationInfo.InvitationStatus.INVITE_ACCEPT,invationInfo.getUser().getHxid());
13
14 runOnUiThread(new Runnable() {
15 @Override
16 public void run() {
17 // 頁面發生變化
18 Toast.makeText(InviteActivity.this, "接受了邀請", Toast.LENGTH_SHORT).show();
19
20 // 刷新頁面
21 refresh();
22 }
23 });
24
25 } catch (HyphenateException e) {
26 e.printStackTrace();
27
28 runOnUiThread(new Runnable() {
29 @Override
30 public void run() {
31 Toast.makeText(InviteActivity.this, "接受邀請失敗", Toast.LENGTH_SHORT).show();
32 }
33 });
34 }
35 }
36 });
37 }
38
39 @Override
40 public void onReject(final InvationInfo invationInfo) {
41 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
42 @Override
43 public void run() {
44 try {
45 EMClient.getInstance().contactManager().declineInvitation(invationInfo.getUser().getHxid());
46
47 // 數據庫變化
48 Model.getInstance().getDbManager().getInviteTableDao().removeInvitation(invationInfo.getUser().getHxid());
49
50 // 頁面變化
51 runOnUiThread(new Runnable() {
52 @Override
53 public void run() {
54 Toast.makeText(InviteActivity.this, "拒絕成功了", Toast.LENGTH_SHORT).show();
55
56 // 刷新頁面
57 refresh();
58 }
59 });
60 } catch (HyphenateException e) {
61 e.printStackTrace();
62
63 runOnUiThread(new Runnable() {
64 @Override
65 public void run() {
66 Toast.makeText(InviteActivity.this, "拒絕失敗了", Toast.LENGTH_SHORT).show();
67 }
68 });
69 }
70 }
71 });
72 }
73
74 // 接受邀請按鈕
75 @Override
76 public void onInviteAccept(final InvationInfo invationInfo) {
77 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
78 @Override
79 public void run() {
80 try {
81 // 告訴環信服務器接受了邀請
82 EMClient.getInstance().groupManager().acceptInvitation(invationInfo.getGroup().getGroupId(), invationInfo.getGroup().getInvatePerson());
83
84 // 本地數據更新
85 invationInfo.setStatus(InvationInfo.InvitationStatus.GROUP_ACCEPT_INVITE);
86 Model.getInstance().getDbManager().getInviteTableDao().addInvitation(invationInfo);
87
88 // 內存數據的變化
89 runOnUiThread(new Runnable() {
90 @Override
91 public void run() {
92 Toast.makeText(InviteActivity.this, "接受邀請", Toast.LENGTH_SHORT).show();
93
94 // 刷新頁面
95 refresh();
96 }
97 });
98 } catch (HyphenateException e) {
99 e.printStackTrace();
100 runOnUiThread(new Runnable() {
101 @Override
102 public void run() {
103 Toast.makeText(InviteActivity.this, "接受邀請失敗", Toast.LENGTH_SHORT).show();
104 }
105 });
106 }
107 }
108 });
109 }
110
111 // 拒絕邀請按鈕
112 @Override
113 public void onInviteReject(final InvationInfo invationInfo) {
114 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
115 @Override
116 public void run() {
117 try {
118 // 告訴環信服務器拒絕了邀請
119 EMClient.getInstance().groupManager().declineInvitation(invationInfo.getGroup().getGroupId(), invationInfo.getGroup().getInvatePerson(),"拒絕邀請");
120
121 // 更新本地數據庫
122 invationInfo.setStatus(InvationInfo.InvitationStatus.GROUP_REJECT_INVITE);
123 Model.getInstance().getDbManager().getInviteTableDao().addInvitation(invationInfo);
124
125 // 更新內存的數據
126 runOnUiThread(new Runnable() {
127 @Override
128 public void run() {
129 Toast.makeText(InviteActivity.this, "拒絕邀請", Toast.LENGTH_SHORT).show();
130
131 // 刷新頁面
132 refresh();
133 }
134 });
135 } catch (HyphenateException e) {
136 e.printStackTrace();
137 }
138 }
139 });
140 }
141
142 // 接受申請按鈕
143 @Override
144 public void onApplicationAccept(final InvationInfo invationInfo) {
145 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
146 @Override
147 public void run() {
148 try {
149 // 告訴環信服務器接受了申請
150 EMClient.getInstance().groupManager().acceptApplication(invationInfo.getGroup().getGroupId(), invationInfo.getGroup().getInvatePerson());
151
152 // 更新數據庫
153 invationInfo.setStatus(InvationInfo.InvitationStatus.GROUP_ACCEPT_APPLICATION);
154 Model.getInstance().getDbManager().getInviteTableDao().addInvitation(invationInfo);
155
156 // 更新內存
157 runOnUiThread(new Runnable() {
158 @Override
159 public void run() {
160 Toast.makeText(InviteActivity.this, "接受申請", Toast.LENGTH_SHORT).show();
161
162 refresh();
163 }
164 });
165 } catch (HyphenateException e) {
166 e.printStackTrace();
167 }
168 }
169 });
170 }
171
172 // 拒絕申請按鈕
173 @Override
174 public void onApplicationReject(final InvationInfo invationInfo) {
175 Model.getInstance().getGlobalThreadPool().execute(new Runnable() {
176 @Override
177 public void run() {
178 try {
179 // 告訴環信服務器拒絕了申請
180 EMClient.getInstance().groupManager().declineApplication(invationInfo.getGroup().getGroupId(),invationInfo.getGroup().getInvatePerson(),"拒絕申請");
181
182 // 更新本地數據庫
183 invationInfo.setStatus(InvationInfo.InvitationStatus.GROUP_REJECT_APPLICATION);
184 Model.getInstance().getDbManager().getInviteTableDao().addInvitation(invationInfo);
185
186 // 更新內存
187 runOnUiThread(new Runnable() {
188 @Override
189 public void run() {
190 Toast.makeText(InviteActivity.this, "拒絕申請", Toast.LENGTH_SHORT).show();
191
192 refresh();
193 }
194 });
195 } catch (HyphenateException e) {
196 e.printStackTrace();
197
198 runOnUiThread(new Runnable() {
199 @Override
200 public void run() {
201 Toast.makeText(InviteActivity.this, "拒絕申請失敗", Toast.LENGTH_SHORT).show();
202 }
203 });
204 }
205 }
206 });
207 }
208 };
OnInviteListener
5.注冊聯系人邀請信息變化的廣播
mLBM = LocalBroadcastManager.getInstance(this);
mLBM.registerReceiver(InviteChangedReceiver, new IntentFilter(Constant.CONTACT_INVITE_CHANGED));
private BroadcastReceiver InviteChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
///聯系人邀請信息變化
mInviteAdapter.refresh(Model.getInstace().getDbManager().getInviteTableDao().getInvitations());
}
};