package cn.shangyu.gdxzExpert.activity; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.gyf.immersionbar.ImmersionBar; import com.lidroid.xutils.exception.HttpException; import com.lidroid.xutils.http.HttpHandler; import com.lidroid.xutils.http.RequestParams; import com.lidroid.xutils.http.ResponseInfo; import com.lidroid.xutils.http.callback.RequestCallBack; import com.lidroid.xutils.http.client.HttpRequest.HttpMethod; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import cn.shangyu.gdxzExpert.R; import cn.shangyu.gdxzExpert.base.BaseActivity; import cn.shangyu.gdxzExpert.bean.BaseBean; import cn.shangyu.gdxzExpert.bean.MessageListBean; import cn.shangyu.gdxzExpert.bean.MessageListBean.MessageList; import cn.shangyu.gdxzExpert.http.HttpHelper; import cn.shangyu.gdxzExpert.http.OnCallBackFromNet; import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase; import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.Mode; import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshBase.OnRefreshListener2; import cn.shangyu.gdxzExpert.pulltorefreshview.PullToRefreshListView; import cn.shangyu.gdxzExpert.utils.CommonUtil; import cn.shangyu.gdxzExpert.utils.Constant; import cn.shangyu.gdxzExpert.utils.GsonTools; import cn.shangyu.gdxzExpert.utils.LogUtil; import cn.shangyu.gdxzExpert.utils.SharePrefUtil; import cn.shangyu.gdxzExpert.utils.StringUtil; import cn.shangyu.gdxzExpert.utils.ToastUtil; import cn.shangyu.gdxzExpert.utils.UIUtils; import cn.shangyu.gdxzExpert.utils.Url; import cn.shangyu.gdxzExpert.widget.ECListDialog; import cn.shangyu.gdxzExpert.widget.LoadingPage.ResultState; import static cn.shangyu.gdxzExpert.utils.Url.readAll; /** * * @author ssy Copyright (C) 2015 河南商宇科技有限公司 * * 功能说明:首页-系统消息 */ public class SystemMessageActivity extends BaseActivity implements OnItemClickListener, OnItemLongClickListener, OnCallBackFromNet { // listview控件 private PullToRefreshListView ptrLv; // 处理正在加载,空,错误的布局 private TextView load_empty; private ArrayList MessageList = new ArrayList(); private String getmessageList = Url.getmessageList; private MessageAdapter msgAdapter; private HttpHandler httpHandler; public static int ERROR = 101; public static final int READALL = 103; public static int REQUEST_REFRESH = 102; private String deleteUuid = null; @Override public void setTitle() { // TODO Auto-generated method stub top_title.setText("我的消息"); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public View onCreateSuccessedView() { // TODO Auto-generated method stub ImmersionBar.with(this).keyboardEnable(true).statusBarDarkFont(true).titleBar(mToolbar).init(); View view = View.inflate(ct, R.layout.activity_system_message, null); ptrLv = (PullToRefreshListView) view.findViewById(R.id.lv_item_message); // 处理正在加载,空,错误的布局 load_empty = (TextView) view.findViewById(R.id.load_empty); load_empty.setText("暂无系统消息"); ptrLv.setMode(Mode.PULL_FROM_START); // 得到实际的ListView 设置点击 ptrLv.getRefreshableView().setOnItemClickListener(this); ptrLv.getRefreshableView().setOnItemLongClickListener(this); setLastUpdateTime(); ptrLv.setOnRefreshListener(new OnRefreshListener2() { @Override public void onPullDownToRefresh(PullToRefreshBase refreshView) { // TODO Auto-generated method stub // 下拉刷新 getMessageList(getmessageList, true); } @Override public void onPullUpToRefresh(PullToRefreshBase refreshView) { // TODO Auto-generated method stub } }); top_right_text.setVisibility(View.VISIBLE); top_right_text.setText("一键已读"); top_right_text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { readAll(); } }); initData(); return view; } @Override public ResultState onLoad() { return ResultState.STATE_SUCCESSED; } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); // 取消所有的状态栏通知 // ECNotificationManager.getInstance().forceCancelNotification(); } private void readAll() { Map param = new HashMap<>(); sendJsonPostParamtoNetSignMD5(readAll,param,READALL,this); } /** * 实例化数据 initData * * void */ public void initData() { String result = SharePrefUtil.getString(ct, getmessageList, null); if (!TextUtils.isEmpty(result)) { processData(result); } else { // 显示加载框 showProgressDialog("正在加载"); } getMessageList(getmessageList, true); } // 设置刷新时间 private void setLastUpdateTime() { String text = CommonUtil.getStringDate(); ptrLv.getLoadingLayoutProxy().setLastUpdatedLabel(text); } // 刷新完成 private void onLoaded() { closeProgressDialog(); ptrLv.onRefreshComplete(); } /** * 请求网络,获取消息的列表 getNewPatientList ssy * * @param loadUrl * 请求地址 void */ private void getMessageList(final String loadUrl, final boolean isRefresh) { String expertUuid = SharePrefUtil.getString(UIUtils.getContext(), "uuid", ""); RequestParams params = new RequestParams(); params.addBodyParameter("expertUuid", expertUuid); httpHandler = HttpHelper.loadData(HttpMethod.POST, loadUrl, params, new RequestCallBack() { @Override public void onSuccess(ResponseInfo info) { SharePrefUtil.saveString(ct, loadUrl, info.result); processData(info.result); } @Override public void onFailure(HttpException arg0, String arg1) { LogUtil.i("数据请求失败了: " + arg1); // CustomToast.show(ct, "加载失败,请稍后再试", 1); onLoaded(); } }); } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); closeProgressDialog(); if (httpHandler != null) { httpHandler.cancel();// 取消网络请求 } } /** * 解析并处理数据 * * @param result */ private void processData(String result) { // 解析json数据 MessageListBean bean = GsonTools.fromGsonToBean(result, MessageListBean.class); if (StringUtil.isOneToCode(bean.code)) { ToastUtil.showToast(bean.message); ptrLv.setEmptyView(load_empty); return; } // 初始化列表数据 MessageList.clear(); // 数据为空 if (bean.data == null || bean.data.size() == 0) { load_empty.setVisibility(View.VISIBLE); } else { load_empty.setVisibility(View.GONE); for (int i = 0; i < bean.data.size(); i++) { if ("1".equals(bean.data.get(i).receiveType)) {// 1.专家 2.患者 MessageList.add(bean.data.get(i)); } } // MessageList.addAll(bean.data); } // 实例化适配器 msgAdapter = new MessageAdapter(ct, MessageList); ptrLv.setAdapter(msgAdapter); // 完成 onLoaded(); } public class MessageAdapter extends BaseAdapter { private Context context; private List List; public MessageAdapter(Context context, ArrayList messageList) { this.context = context; this.List = messageList; } @Override public int getCount() { return List.size(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = View .inflate(context, R.layout.item_message, null); mHolder = new NewsViewHolder(); mHolder.tv_title = (TextView) convertView .findViewById(R.id.tv_title);// 标题 mHolder.tv_type = (TextView) convertView .findViewById(R.id.tv_type);// 类型 mHolder.tv_content = (TextView) convertView .findViewById(R.id.tv_content);// 内容 mHolder.tv_date = (TextView) convertView .findViewById(R.id.tv_date);// 日期 mHolder.iv_msg = (ImageView) convertView .findViewById(R.id.iv_msg);// 图片logo convertView.setTag(mHolder); } else { mHolder = (NewsViewHolder) convertView.getTag(); } // 给控件赋值. MessageList msg = List.get(position); String type = ""; if ("1".equals(msg.type)) {// 1.电话咨询提醒 2.门诊预约提醒 3.包月定制提醒消息 type = "(电话咨询)"; mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); } else if ("2".equals(msg.type)) { type = "(门诊预约)"; mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); } else if ("3".equals(msg.type)) { type = "(按月定制)"; mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); } else if ("4".equals(msg.type)) { type = "(鲜花服务)"; mHolder.iv_msg.setImageResource(R.drawable.icon_system_flowers1); } else if ("5".equals(msg.type)) { type = "(申请通知)"; mHolder.iv_msg .setImageResource(R.drawable.icon_system_doc_patient1); } // else if ("7".equals(msg.type)) { // type = "(订单通知)"; // mHolder.iv_msg.setImageResource(R.drawable.icon_system_doctor); // } else { type = "(系统消息)"; mHolder.iv_msg.setImageResource(R.drawable.icon_system_notice1); } mHolder.tv_type.setText(type); mHolder.tv_title.setText(msg.title); mHolder.tv_content.setText(msg.content); if (!TextUtils.isEmpty(msg.sendDate) && msg.sendDate.length() >= 16) { mHolder.tv_date.setText(msg.sendDate.substring(0, 10)); } else if (!TextUtils.isEmpty(msg.sendDate)) { mHolder.tv_date.setText(msg.sendDate); } // 判断当前这条消息是否已经读过 String readIDArray = SharePrefUtil.getString(context, Constant.READ_MSG_ID_ARRAY_KEY, null); if (!TextUtils.isEmpty(readIDArray) && readIDArray.contains(msg.uuid + msg.title)) { mHolder.tv_title.setTextColor(Color.GRAY); mHolder.tv_content.setTextColor(Color.GRAY); mHolder.tv_type.setTextColor(Color.GRAY); } else { if (msg.isRead.equals("1")) { mHolder.tv_title.setTextColor(Color.GRAY); mHolder.tv_content.setTextColor(Color.GRAY); mHolder.tv_type.setTextColor(Color.GRAY); } else { mHolder.tv_title.setTextColor(Color.BLACK); mHolder.tv_content.setTextColor(Color.BLACK); mHolder.tv_type.setTextColor(Color.BLACK); } } return convertView; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 0; } } private NewsViewHolder mHolder = null; private class NewsViewHolder { public ImageView iv_msg; public TextView tv_date; public TextView tv_content; public TextView tv_type; public TextView tv_title; } @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { position = position - ptrLv.getRefreshableView().getHeaderViewsCount(); } String messageUuid = MessageList.get(position).uuid; String title = MessageList.get(position).title; String content = MessageList.get(position).content; String sendDate = MessageList.get(position).sendDate; // 把当前被点击的这条新闻的id存起来 1#2#3#4 String readMsgIDArray = SharePrefUtil.getString(ct, Constant.READ_MSG_ID_ARRAY_KEY, null); String idArray = null; if (TextUtils.isEmpty(readMsgIDArray)) { // 唯一标示id,采用uuid与标题 idArray = messageUuid + title; } else { idArray = readMsgIDArray + "#" + messageUuid + title; } SharePrefUtil.saveString(ct, Constant.READ_MSG_ID_ARRAY_KEY, idArray); // 通知ListView刷新 msgAdapter.notifyDataSetChanged(); String ms = MessageList.get(position).content; Boolean mHave = ms.contains("申请成为您的随访患者");// 是否包含“申请成为您的随访患者” // 如果返回的状态是5 添加好友申请点击item跳转的相应位置 if (MessageList.get(position).type.equals("5") && mHave == true) { Intent intent = new Intent(ct, NewPatientActivity.class); startActivity(intent); } else { Intent intent = new Intent(ct, SystemMessageDetailActivity.class); intent.putExtra("messageUuid", messageUuid); intent.putExtra("title", title); intent.putExtra("content", content); intent.putExtra("sendDate", sendDate); startActivity(intent); } // ToastUtil.showToast("消息详情:"+MessageList.get(position).uuid); } @Override protected void processClick(View v) { // TODO Auto-generated method stub } @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { // TODO Auto-generated method stub if (ptrLv.getRefreshableView().getHeaderViewsCount() > 0) { position = position - ptrLv.getRefreshableView().getHeaderViewsCount(); } deleteUuid = MessageList.get(position).uuid; @SuppressLint({"StringFormatInvalid", "LocalSuppress"}) final ECListDialog dialog = new ECListDialog( SystemMessageActivity.this, new String[] { getString( R.string.message_delete, "") }); dialog.setOnDialogItemClickListener(new ECListDialog.OnDialogItemClickListener() { @Override public void onDialogItemClick(Dialog d, int position) { DeleteMessage(); dialog.dismiss(); } }); dialog.setTitle("删除此系统消息"); dialog.show(); return true; } public void DeleteMessage() { Map param = new HashMap(); param.put("uuid", deleteUuid); sendParamtoNet(Url.getDeleteMessage, param, 101, SystemMessageActivity.this, true); } @Override public void onCallbackFromThread(String resultJson) { // TODO Auto-generated method stub } @Override public void onCallBackFromThread(String resultJson, int resultCode) { // TODO Auto-generated method stub switch (resultCode) { case 101: BaseBean bean = GsonTools.fromGsonToBean(resultJson, BaseBean.class); if (bean.code.equals("1")) { for (int i = 0; i < MessageList.size(); i++) { if (deleteUuid.equals(MessageList.get(i).uuid)) { MessageList.remove(i); msgAdapter.notifyDataSetChanged(); } } if (MessageList.size() == 0) { ptrLv.setEmptyView(load_empty); } } else { ToastUtil.showMessage(bean.message); } break; case READALL: JSONObject jsonObject= null; try { jsonObject = new JSONObject(resultJson); String message = jsonObject.getString("message"); ToastUtil.showMessage(message); initData(); } catch (JSONException e) { e.printStackTrace(); ToastUtil.showMessage("获取失败,请重试"); } break; } } }