PageRenderTime 70ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 1ms

/yueai/src/main/java/com/yueai/fragment/MessageFragment.java

https://bitbucket.org/juzhiwiscom/datelove
Java | 574 lines | 247 code | 45 blank | 282 comment | 32 complexity | a2282031069616e14fe39f7c138dfca0 MD5 | raw file
  1. package com.yueai.fragment;
  2. import android.graphics.Canvas;
  3. import android.graphics.Color;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.support.v4.widget.SwipeRefreshLayout;
  7. import android.support.v7.widget.LinearLayoutManager;
  8. import android.support.v7.widget.RecyclerView;
  9. import android.support.v7.widget.helper.ItemTouchHelper;
  10. import android.text.TextUtils;
  11. import android.view.View;
  12. import com.alibaba.fastjson.JSON;
  13. import com.library.adapter.recyclerview.CommonRecyclerViewAdapter;
  14. import com.library.adapter.recyclerview.RecyclerViewHolder;
  15. import com.library.widgets.ItemTouchHelperCallback;
  16. import com.library.widgets.RefreshRecyclerView;
  17. import com.yueai.R;
  18. import com.yueai.activity.ChatActivity;
  19. import com.yueai.adapter.MessageAdapter;
  20. import com.yueai.base.BaseTitleFragment;
  21. import com.yueai.bean.Chat;
  22. import com.yueai.bean.ChatInfo;
  23. import com.yueai.bean.ChatMsg;
  24. import com.yueai.bean.Image;
  25. import com.yueai.bean.UserBase;
  26. import com.yueai.constant.IUrlConstant;
  27. import com.yueai.event.MessageChangedEvent;
  28. import com.yueai.event.UpdateMessageCountEvent;
  29. import com.yueai.utils.CommonRequestUtil;
  30. import com.yueai.utils.Utils;
  31. import com.yueai.xml.PlatformInfoXml;
  32. import com.zhy.http.okhttp.OkHttpUtils;
  33. import com.zhy.http.okhttp.callback.Callback;
  34. import org.greenrobot.eventbus.EventBus;
  35. import org.greenrobot.eventbus.Subscribe;
  36. import org.greenrobot.eventbus.ThreadMode;
  37. import butterknife.BindView;
  38. import okhttp3.Call;
  39. import okhttp3.Response;
  40. /**
  41. * 信箱
  42. */
  43. public class MessageFragment extends BaseTitleFragment {
  44. @BindView(R.id.message_recyclerview)
  45. RefreshRecyclerView mRefreshRecyclerView;
  46. private MessageAdapter mMessageAdapter;
  47. private int pageNum = 1;
  48. private final String pageSize = "30";
  49. private int mTotalUnreadMsgCnt;
  50. private Handler handler = new Handler();
  51. private Runnable runnable = new Runnable() {
  52. public void run() {
  53. this.update();
  54. // handler.postDelayed(this, 1000*10);// 间隔1秒
  55. }
  56. void update() {
  57. //刷新msg的内容
  58. loadMessageList();
  59. }
  60. };
  61. /**停止刷新**/
  62. public void stopRefish(){
  63. handler.removeCallbacks(runnable); //停止刷新
  64. }
  65. /**一进入此界面开始首次刷新**/
  66. public void startFirstRefish(){
  67. handler.postDelayed(runnable, 100); //开始刷新
  68. }
  69. /**开始刷新**/
  70. public void startRefish(){
  71. handler.postDelayed(runnable, 1000*10); //开始刷新
  72. }
  73. @Override
  74. protected int getLayoutResId() {
  75. return R.layout.fragment_message;
  76. }
  77. @Override
  78. protected void initViewsAndVariables() {
  79. setTitle(getString(R.string.tab_mail));
  80. // 设置下拉刷新样式
  81. mRefreshRecyclerView.setColorSchemeResources(R.color.main_color);
  82. mRefreshRecyclerView.setProgressBackgroundColorSchemeColor(Color.WHITE);
  83. LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
  84. linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  85. mRefreshRecyclerView.setLayoutManager(linearLayoutManager);
  86. // 设置加载动画
  87. mRefreshRecyclerView.setLoadingView(Utils.getLoadingView(getActivity()));
  88. mMessageAdapter = new MessageAdapter(getActivity(), R.layout.item_fragment_message);
  89. mRefreshRecyclerView.setAdapter(mMessageAdapter);
  90. }
  91. @Override
  92. protected void addListeners() {
  93. // 设置侧滑监听
  94. mRefreshRecyclerView.setItemTouchHelperListener(new ItemTouchHelperCallback.ItemTouchHelperListener() {
  95. @Override
  96. public void onItemDrag(int fromPosition, int toPosition) {
  97. if (mMessageAdapter != null) {
  98. mMessageAdapter.move(fromPosition, toPosition);
  99. }
  100. }
  101. @Override
  102. public void onItemSwipe(final int position) {
  103. if (mMessageAdapter != null) {
  104. Chat chat = mMessageAdapter.getItemByPosition(position);
  105. if (chat != null) {
  106. UserBase userBase = chat.getUserBaseEnglish();
  107. if (userBase != null) {
  108. CommonRequestUtil.deleteChatHistory(userBase.getId(), true, new CommonRequestUtil.OnCommonListener() {
  109. @Override
  110. public void onSuccess() {
  111. mMessageAdapter.removeItem(position);
  112. loadMessageList();
  113. }
  114. @Override
  115. public void onFail() {
  116. }
  117. });
  118. }
  119. }
  120. }
  121. }
  122. @Override
  123. public boolean onItemAnim(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState) {
  124. if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {// 侧滑
  125. int distance = (int) Math.abs(dX);
  126. RecyclerViewHolder recyclerViewHolder = ((RecyclerViewHolder) viewHolder);
  127. if (distance <= recyclerViewHolder.getView(R.id.item_del_container).getWidth()) {// 滑动距离未超过删除方块的宽度
  128. // 显示“左滑删除”提示
  129. recyclerViewHolder.setVisibility(R.id.item_del_text, true);
  130. recyclerViewHolder.setVisibility(R.id.item_del_icon, false);
  131. viewHolder.itemView.scrollTo((int) -dX, 0);
  132. } else if (distance < recyclerView.getWidth() / 2) {// 若方块全部显示后仍未超过item一半宽度,则显示删除图标
  133. recyclerViewHolder.setVisibility(R.id.item_del_text, false);
  134. recyclerViewHolder.setVisibility(R.id.item_del_icon, true);
  135. }
  136. return true;
  137. }
  138. return false;
  139. }
  140. @Override
  141. public void onItemClear(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  142. // 恢复状态
  143. viewHolder.itemView.setScrollX(0);
  144. }
  145. });
  146. // 下拉刷新
  147. mRefreshRecyclerView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  148. @Override
  149. public void onRefresh() {
  150. refreshChatMsg();
  151. }
  152. });
  153. // 上拉加载更多
  154. mRefreshRecyclerView.setOnLoadingMoreListener(new RefreshRecyclerView.OnLoadingMoreListener() {
  155. @Override
  156. public void onLoadMore() {
  157. pageNum++;
  158. loadMessageList();
  159. }
  160. });
  161. ///**对触摸事件的监听,根据手指动作判断要不要进行自动刷新**/
  162. // mRefreshRecyclerView.setIsTouchListener(new RefreshRecyclerView.StopRefishListener() {
  163. // @Override
  164. // public void isTouch(boolean istouch) {
  165. // if(istouch){
  166. // stopRefish();
  167. // }else {
  168. // startRefish();
  169. // }
  170. // }
  171. // });
  172. mMessageAdapter.setOnItemClickListener(new CommonRecyclerViewAdapter.OnItemClickListener() {
  173. @Override
  174. public void onItemClick(View view, int position, RecyclerViewHolder viewHolder) {
  175. Chat chat = mMessageAdapter.getItemByPosition(position);
  176. if (chat != null) {
  177. ChatMsg chatMsg = chat.getChat();
  178. if (chatMsg != null) {
  179. int unreadMsgCnt = chatMsg.getUnreadCount();
  180. if (unreadMsgCnt > 0) {// 标记未读消息为已读
  181. chatMsg.setUnreadCount(0);
  182. chat.setChat(chatMsg);
  183. mMessageAdapter.updateItem(position, chat);
  184. // 更新总的未读消息数
  185. mTotalUnreadMsgCnt = mTotalUnreadMsgCnt - unreadMsgCnt;
  186. EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  187. }
  188. }
  189. UserBase userBase = chat.getUserBaseEnglish();
  190. if (userBase != null) {
  191. Image image = userBase.getImage();
  192. String imgUrl = "";
  193. if (image != null) {
  194. imgUrl = image.getThumbnailUrl();
  195. }
  196. ChatActivity.toChatActivity(getActivity(), userBase.getId(), userBase.getNickName(), imgUrl);
  197. }
  198. }
  199. }
  200. });
  201. }
  202. private void refreshChatMsg() {
  203. pageNum = 1;
  204. loadMessageList();
  205. }
  206. /**
  207. * 加载聊天消息列表
  208. */
  209. private void loadMessageList() {
  210. OkHttpUtils.post()
  211. .url(IUrlConstant.URL_GET_ALL_CHAT_LIST)
  212. .addHeader("token", PlatformInfoXml.getToken())
  213. .addParams("platformInfo", PlatformInfoXml.getPlatformJsonString())
  214. .addParams("pageNum", String.valueOf(pageNum))
  215. .addParams("pageSize", pageSize)
  216. .build()
  217. .execute(new Callback<ChatInfo>() {
  218. @Override
  219. public ChatInfo parseNetworkResponse(Response response, int id) throws Exception {
  220. String resultJson = response.body().string();
  221. if (!TextUtils.isEmpty(resultJson)) {
  222. return JSON.parseObject(resultJson, ChatInfo.class);
  223. }
  224. return null;
  225. }
  226. @Override
  227. public void onError(Call call, Exception e, int id) {
  228. stopRefresh(3);
  229. }
  230. @Override
  231. public void onResponse(final ChatInfo response, int id) {
  232. if (response != null) {
  233. mTotalUnreadMsgCnt = response.getTotalUnread();
  234. EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  235. // 延时1秒显示
  236. new Handler().postDelayed(new Runnable() {
  237. @Override
  238. public void run() {
  239. if (mMessageAdapter != null) {
  240. mMessageAdapter.setServerSystemTime(response.getSystemTime());
  241. if (pageNum == 1) {
  242. mMessageAdapter.replaceAll(response.getListChat());
  243. } else {
  244. mMessageAdapter.appendToList(response.getListChat());
  245. }
  246. }
  247. }
  248. }, 1000);
  249. }
  250. stopRefresh(1);
  251. }
  252. });
  253. }
  254. private void stopRefresh(int secs) {
  255. if (mRefreshRecyclerView != null) {
  256. mRefreshRecyclerView.refreshCompleted(secs);
  257. mRefreshRecyclerView.loadMoreCompleted(secs);
  258. }
  259. }
  260. @Override
  261. protected void doRegister() {
  262. super.doRegister();
  263. EventBus.getDefault().register(this);
  264. }
  265. @Override
  266. protected void unregister() {
  267. super.unregister();
  268. EventBus.getDefault().unregister(this);
  269. }
  270. @Override
  271. public void onPause() {
  272. super.onPause();
  273. }
  274. // @Subscribe(threadMode = ThreadMode.MAIN)
  275. // public void onEvent(Message msg) {
  276. // if (msg.what == 1111111) {
  277. // //刷新msg的内容
  278. // loadMessageList();
  279. // }
  280. //
  281. // }
  282. @Subscribe
  283. public void onEvent(MessageChangedEvent event) {
  284. refreshChatMsg();
  285. }
  286. }
  287. ///**
  288. // * 信箱
  289. // */
  290. //public class MessageFragment extends BaseTitleFragment {
  291. // @BindView(R.id.message_recyclerview)
  292. // RefreshRecyclerView mRefreshRecyclerView;
  293. //
  294. // private MessageAdapter mMessageAdapter;
  295. // private int pageNum = 1;
  296. // private final String pageSize = "30";
  297. // private int mTotalUnreadMsgCnt;
  298. //
  299. // private Handler handler = new Handler();
  300. // private Runnable runnable = new Runnable() {
  301. // public void run() {
  302. // this.update();
  303. //// handler.postDelayed(this, 1000*10);// 间隔1秒
  304. // }
  305. // void update() {
  306. // //刷新msg的内容
  307. // loadMessageList();
  308. //
  309. // }
  310. // };
  311. //
  312. // /**停止刷新**/
  313. // public void stopRefish(){
  314. // handler.removeCallbacks(runnable); //停止刷新
  315. // }
  316. // /**一进入此界面开始首次刷新**/
  317. // public void startFirstRefish(){
  318. // handler.postDelayed(runnable, 100); //开始刷新
  319. // }
  320. // /**开始刷新**/
  321. // public void startRefish(){
  322. // handler.postDelayed(runnable, 1000*10); //开始刷新
  323. // }
  324. // @Override
  325. // protected int getLayoutResId() {
  326. // return R.layout.fragment_message;
  327. // }
  328. //
  329. // @Override
  330. // protected void initViewsAndVariables() {
  331. // setTitle(getString(R.string.tab_mail));
  332. // // 设置下拉刷新样式
  333. // mRefreshRecyclerView.setColorSchemeResources(R.color.main_color);
  334. // mRefreshRecyclerView.setProgressBackgroundColorSchemeColor(Color.WHITE);
  335. // LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
  336. // linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
  337. // mRefreshRecyclerView.setLayoutManager(linearLayoutManager);
  338. // // 设置加载动画
  339. // mRefreshRecyclerView.setLoadingView(Utils.getLoadingView(getActivity()));
  340. // mMessageAdapter = new MessageAdapter(getActivity(), R.layout.item_fragment_message);
  341. // mRefreshRecyclerView.setAdapter(mMessageAdapter);
  342. // }
  343. //
  344. // @Override
  345. // protected void addListeners() {
  346. // // 设置侧滑监听
  347. // mRefreshRecyclerView.setItemTouchHelperListener(new ItemTouchHelperCallback.ItemTouchHelperListener() {
  348. //
  349. // @Override
  350. // public void onItemDrag(int fromPosition, int toPosition) {
  351. // if (mMessageAdapter != null) {
  352. // mMessageAdapter.move(fromPosition, toPosition);
  353. // }
  354. // }
  355. //
  356. // @Override
  357. // public void onItemSwipe(final int position) {
  358. // if (mMessageAdapter != null) {
  359. // Chat chat = mMessageAdapter.getItemByPosition(position);
  360. // if (chat != null) {
  361. // UserBase userBase = chat.getUserBaseEnglish();
  362. // if (userBase != null) {
  363. // CommonRequestUtil.deleteChatHistory(userBase.getId(), true, new CommonRequestUtil.OnCommonListener() {
  364. // @Override
  365. // public void onSuccess() {
  366. // mMessageAdapter.removeItem(position);
  367. // }
  368. //
  369. // @Override
  370. // public void onFail() {
  371. // }
  372. // });
  373. // }
  374. // }
  375. // }
  376. // }
  377. //
  378. // @Override
  379. // public boolean onItemAnim(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState) {
  380. // if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {// 侧滑
  381. // int distance = (int) Math.abs(dX);
  382. // RecyclerViewHolder recyclerViewHolder = ((RecyclerViewHolder) viewHolder);
  383. // if (distance <= recyclerViewHolder.getView(R.id.item_del_container).getWidth()) {// 滑动距离未超过删除方块的宽度
  384. // // 显示“左滑删除”提示
  385. // recyclerViewHolder.setVisibility(R.id.item_del_text, true);
  386. // recyclerViewHolder.setVisibility(R.id.item_del_icon, false);
  387. // viewHolder.itemView.scrollTo((int) -dX, 0);
  388. // } else if (distance < recyclerView.getWidth() / 2) {// 若方块全部显示后仍未超过item一半宽度,则显示删除图标
  389. // recyclerViewHolder.setVisibility(R.id.item_del_text, false);
  390. // recyclerViewHolder.setVisibility(R.id.item_del_icon, true);
  391. // }
  392. // return true;
  393. // }
  394. // return false;
  395. // }
  396. //
  397. // @Override
  398. // public void onItemClear(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  399. // // 恢复状态
  400. // viewHolder.itemView.setScrollX(0);
  401. // }
  402. // });
  403. // // 下拉刷新
  404. // mRefreshRecyclerView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  405. // @Override
  406. // public void onRefresh() {
  407. // refreshChatMsg();
  408. // }
  409. // });
  410. // // 上拉加载更多
  411. // mRefreshRecyclerView.setOnLoadingMoreListener(new RefreshRecyclerView.OnLoadingMoreListener() {
  412. // @Override
  413. // public void onLoadMore() {
  414. // pageNum++;
  415. // loadMessageList();
  416. // }
  417. // });
  418. // mMessageAdapter.setOnItemClickListener(new CommonRecyclerViewAdapter.OnItemClickListener() {
  419. // @Override
  420. // public void onItemClick(View view, int position, RecyclerViewHolder viewHolder) {
  421. // Chat chat = mMessageAdapter.getItemByPosition(position);
  422. // if (chat != null) {
  423. // ChatMsg chatMsg = chat.getChat();
  424. // if (chatMsg != null) {
  425. // int unreadMsgCnt = chatMsg.getUnreadCount();
  426. // if (unreadMsgCnt > 0) {// 标记未读消息为已读
  427. // chatMsg.setUnreadCount(0);
  428. // chat.setChat(chatMsg);
  429. // mMessageAdapter.updateItem(position, chat);
  430. // // 更新总的未读消息数
  431. // mTotalUnreadMsgCnt = mTotalUnreadMsgCnt - unreadMsgCnt;
  432. // EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  433. // }
  434. // }
  435. // UserBase userBase = chat.getUserBaseEnglish();
  436. // if (userBase != null) {
  437. // Image image = userBase.getImage();
  438. // String imgUrl = "";
  439. // if (image != null) {
  440. // imgUrl = image.getThumbnailUrl();
  441. // }
  442. // ChatActivity.toChatActivity(getActivity(), userBase.getId(), userBase.getNickName(), imgUrl);
  443. // }
  444. // }
  445. // }
  446. // });
  447. // }
  448. //
  449. // private void refreshChatMsg() {
  450. // pageNum = 1;
  451. // loadMessageList();
  452. // }
  453. //
  454. // /**
  455. // * 加载聊天消息列表
  456. // */
  457. // private void loadMessageList() {
  458. // OkHttpUtils.post()
  459. // .url(IUrlConstant.URL_GET_ALL_CHAT_LIST)
  460. // .addHeader("token", PlatformInfoXml.getToken())
  461. // .addParams("platformInfo", PlatformInfoXml.getPlatformJsonString())
  462. // .addParams("pageNum", String.valueOf(pageNum))
  463. // .addParams("pageSize", pageSize)
  464. // .build()
  465. // .execute(new Callback<ChatInfo>() {
  466. // @Override
  467. // public ChatInfo parseNetworkResponse(Response response, int id) throws Exception {
  468. // String resultJson = response.body().string();
  469. // if (!TextUtils.isEmpty(resultJson)) {
  470. // return JSON.parseObject(resultJson, ChatInfo.class);
  471. // }
  472. // return null;
  473. // }
  474. //
  475. // @Override
  476. // public void onError(Call call, Exception e, int id) {
  477. // stopRefresh(3);
  478. // }
  479. //
  480. // @Override
  481. // public void onResponse(final ChatInfo response, int id) {
  482. // if (response != null) {
  483. // mTotalUnreadMsgCnt = response.getTotalUnread();
  484. // EventBus.getDefault().post(new UpdateMessageCountEvent(mTotalUnreadMsgCnt));
  485. // // 延时1秒显示
  486. // new Handler().postDelayed(new Runnable() {
  487. // @Override
  488. // public void run() {
  489. // if (mMessageAdapter != null) {
  490. // mMessageAdapter.setServerSystemTime(response.getSystemTime());
  491. // if (pageNum == 1) {
  492. // mMessageAdapter.replaceAll(response.getListChat());
  493. // } else {
  494. // mMessageAdapter.appendToList(response.getListChat());
  495. // }
  496. // }
  497. // }
  498. // }, 1000);
  499. // }
  500. // stopRefresh(1);
  501. // }
  502. // });
  503. // }
  504. //
  505. // private void stopRefresh(int secs) {
  506. // if (mRefreshRecyclerView != null) {
  507. // mRefreshRecyclerView.refreshCompleted(secs);
  508. // mRefreshRecyclerView.loadMoreCompleted(secs);
  509. // }
  510. // }
  511. //
  512. // @Override
  513. // protected void doRegister() {
  514. // super.doRegister();
  515. // EventBus.getDefault().register(this);
  516. // }
  517. //
  518. // @Override
  519. // protected void unregister() {
  520. // super.unregister();
  521. // EventBus.getDefault().unregister(this);
  522. // }
  523. //
  524. // @Subscribe
  525. // public void onEvent(MessageChangedEvent event) {
  526. // refreshChatMsg();
  527. // }
  528. //
  529. //}