/** * */ package com.keju.maomao.activity.news; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.json.JSONException; import org.json.JSONObject; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.text.SpannableString; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; import com.keju.maomao.AsyncImageLoader; import com.keju.maomao.AsyncImageLoader.ImageCallback; import com.keju.maomao.Constants; import com.keju.maomao.R; import com.keju.maomao.SystemException; import com.keju.maomao.activity.base.BaseActivity; import com.keju.maomao.bean.NewsBean; import com.keju.maomao.bean.ResponseBean; import com.keju.maomao.helper.BusinessHelper; import com.keju.maomao.util.ImageUtil; import com.keju.maomao.util.NetUtil; import com.keju.maomao.util.SharedPrefUtil; import com.keju.maomao.util.StringUtil; /** * 私信列表 * * @author zhuoyong * @data 创建时间:2013-10-30 下午2:52:49 */ public class PrivateNewsListActivity extends BaseActivity implements OnClickListener { private ImageButton ibLift; private Button btnRight; private TextView tvTitle; private int pageIndex = 1;// 页数 private View vFooter; private ProgressBar pbFooter; private TextView tvFooterMore; private boolean isFilter = false; private boolean isLoad = false;// 是否正在加载数据 private boolean isLoadMore = false; private boolean isComplete = false;// 是否加载完了; private ListView ivPrivateList; private List<NewsBean> newsListBean = new ArrayList<NewsBean>(); private NewsListAdapter newsAdapter; private String friendUrl;// 好友的图片的Url private Boolean isCliclClear = false; // 是否点击了清除按钮 私信聊天界面的数据回调 private Map<String, Integer> faceMap = new HashMap<String, Integer>(); private int[] faceRes = new int[] { R.drawable.ic_face_001, R.drawable.ic_face_002, R.drawable.ic_face_003, R.drawable.ic_face_004, R.drawable.ic_face_005, R.drawable.ic_face_006, R.drawable.ic_face_007, R.drawable.ic_face_008, R.drawable.ic_face_009, R.drawable.ic_face_010, R.drawable.ic_face_011, R.drawable.ic_face_012, R.drawable.ic_face_013, R.drawable.ic_face_014, R.drawable.ic_face_015, R.drawable.ic_face_016 }; private ProgressDialog pd; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.piavate_news_list); for (int i = 0; i < faceRes.length; i++) { String j; int k = i + 1; if (k < 10) { j = "00" + k; } else if (k < 100) { j = "0" + k; } else { j = "" + k; } String key = "[edu" + j + "]"; faceMap.put(key, faceRes[i]); } findView(); fillData(); } private void findView() { ibLift = (ImageButton) this.findViewById(R.id.ibLeft); tvTitle = (TextView) this.findViewById(R.id.tvTitle); btnRight = (Button) this.findViewById(R.id.btnRight); // 加载更多footer vFooter = getLayoutInflater().inflate(R.layout.footer, null); pbFooter = (ProgressBar) vFooter.findViewById(R.id.progressBar); tvFooterMore = (TextView) vFooter.findViewById(R.id.tvMore); ivPrivateList = (ListView) this.findViewById(R.id.ivPrivatelist); } private void fillData() { ibLift.setImageResource(R.drawable.ic_btn_left); ibLift.setOnClickListener(this); btnRight.setText("清空"); btnRight.setBackgroundResource(R.drawable.bg_btn_collection); btnRight.setOnClickListener(this); tvTitle.setText("我的私信"); newsAdapter = new NewsListAdapter(); ivPrivateList.addFooterView(vFooter); ivPrivateList.setAdapter(newsAdapter); ivPrivateList.setDividerHeight(0); ivPrivateList.setOnScrollListener(LoadListener); ivPrivateList.setOnItemClickListener(itemListener); if (NetUtil.checkNet(PrivateNewsListActivity.this)) { new PrivateNewsListTask().execute(); } else { showShortToast(R.string.NoSignalException); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.ibLeft: finish(); break; case R.id.btnRight: if (newsListBean.size() > 0) { if (NetUtil.checkNet(PrivateNewsListActivity.this)) { isFilter = true; new ClearTask().execute(); } else { showShortToast(R.string.NoSignalException); } } else { showShortToast("无数据无需清空哦"); } break; default: break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { switch (requestCode) { case Constants.INDEX: isCliclClear = data.getBooleanExtra("iscliclclear", false); break; default: break; } } } /** * listview点击事件 */ OnItemClickListener itemListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { if (arg2 >= newsListBean.size()) { return; } NewsBean bean = newsListBean.get(arg2); friendUrl = bean.getUserUrl(); Intent intent = new Intent(); intent.setClass(PrivateNewsListActivity.this, PrivateLetterActivity.class); Bundle b = new Bundle(); b.putSerializable(Constants.EXTRA_DATA, bean.getFriendId()); b.putSerializable("NICK_NAME", bean.getNickName()); b.putSerializable("FREIND_URL", friendUrl); intent.putExtras(b); startActivityForResult(intent, Constants.INDEX); // openActivity(PrivateLetterActivity.class, b); } }; /** * 滚动监听器 */ OnScrollListener LoadListener = new OnScrollListener() { @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (firstVisibleItem + visibleItemCount == totalItemCount) { isLoadMore = true; } else { isLoadMore = false; } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // 滚动到最后,默认加载下一页 if (scrollState == OnScrollListener.SCROLL_STATE_IDLE && isLoadMore) { if (NetUtil.checkNet(PrivateNewsListActivity.this)) { if (!isLoad && !isComplete) { new PrivateNewsListTask().execute(); } } else { showShortToast(R.string.NoSignalException); } } else { } } }; /** * 获取私信会话 * */ public class PrivateNewsListTask extends AsyncTask<Void, Void, ResponseBean<NewsBean>> { private int page; public PrivateNewsListTask() { } /** * @param pageIndex */ public PrivateNewsListTask(int pageIndex) { this.page = pageIndex; } @Override protected void onPreExecute() { super.onPreExecute(); if (pd == null) { pd = new ProgressDialog(PrivateNewsListActivity.this); } pd.setMessage(getString(R.string.loading)); pd.show(); } @Override protected ResponseBean<NewsBean> doInBackground(Void... params) { int uid = SharedPrefUtil.getUid(PrivateNewsListActivity.this); try { if(isCliclClear){ return new BusinessHelper().getPrivateNews(uid, page); }else{ return new BusinessHelper().getPrivateNews(uid, pageIndex); } } catch (SystemException e) { e.printStackTrace(); } return null; } @Override protected void onPostExecute(ResponseBean<NewsBean> result) { super.onPostExecute(result); if (pd != null) { pd.dismiss(); } pbFooter.setVisibility(View.GONE); if (result.getStatus() != Constants.REQUEST_FAILD) { // 这里获取到十条数据 List<NewsBean> tempList = result.getObjList(); boolean isLastPage = false; if (tempList.size() > 0) { if(isCliclClear){ newsListBean.clear(); newsListBean.addAll(tempList); newsAdapter.notifyDataSetChanged(); // 通知更新 pageIndex++; }else{ newsListBean.addAll(tempList); newsAdapter.notifyDataSetChanged(); pageIndex++; } } else { newsListBean.clear(); newsAdapter.notifyDataSetChanged(); showShortToast("你没有私信会话列表,快找好友聊天去吧"); isLastPage = true; } if (isLastPage) { pbFooter.setVisibility(View.GONE); tvFooterMore.setText(R.string.load_all); isComplete = true; } else { if (tempList.size() > 0 && tempList.size() < Constants.PAGE_SIZE) { pbFooter.setVisibility(View.GONE); tvFooterMore.setText(R.string.load_all); isComplete = true; } else { pbFooter.setVisibility(View.GONE); tvFooterMore.setText("上拉查看更多"); } } if (pageIndex == 1 && tempList.size() == 0) { tvFooterMore.setText(""); } } else { showShortToast(result.getError()); tvFooterMore.setText(""); } newsAdapter.notifyDataSetChanged(); isLoad = false; isFilter = false; } } /** * 私信会话适配器 * */ private class NewsListAdapter extends BaseAdapter { @Override public int getCount() { return newsListBean.size(); } @Override public Object getItem(int position) { return newsListBean.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = getLayoutInflater().inflate(R.layout.private_news_item, null); holder.ivUserPhoto = (ImageView) convertView.findViewById(R.id.ivUserPhoto); holder.tvNickName = (TextView) convertView.findViewById(R.id.tvNickName); holder.tvAge = (TextView) convertView.findViewById(R.id.tvAge); holder.tvCreateTime = (TextView) convertView.findViewById(R.id.tvTime); holder.tvContent = (TextView) convertView.findViewById(R.id.tvcontent); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } fillData(convertView, position, holder); return convertView; } private void fillData(View convertView, int position, ViewHolder viewHolder) { NewsBean bean = newsListBean.get(position); // friendUrl = bean.getUserUrl(); setImageByUrl(viewHolder.ivUserPhoto, BusinessHelper.PIC_BASE_URL + bean.getUserUrl()); if (position % 2 == 0) { // convertView.setBackgroundResource(R.drawable.bg_repeat); } else { // convertView.setBackgroundResource(R.drawable.repeat_blod_slant); } String contentStr = bean.getContent(); SpannableString spannableString = null; if (!StringUtil.isBlank(contentStr)) { boolean isHaveFacePic = contentStr.contains("[edu"); if (isHaveFacePic == true) { if (faceMap != null) { spannableString = ImageUtil.changeTextToEmotions(faceMap, contentStr, PrivateNewsListActivity.this); } } } if (spannableString != null) { viewHolder.tvContent.setText(spannableString); } else { viewHolder.tvContent.setText(contentStr); } // String sendTime = // DateUtil.getConversationTime(bean.getSendTime()); viewHolder.tvCreateTime.setText(bean.getSendTime()); viewHolder.tvNickName.setText(bean.getNickName()); viewHolder.tvAge.setText(bean.getAge() + "岁"); viewHolder.tvContent.setText(bean.getContent()); } private class ViewHolder { ImageView ivUserPhoto; TextView tvNickName, tvCreateTime, tvAge, tvContent; } private void setImageByUrl(ImageView imageView, String url) { if (null == url) { imageView.setImageResource(R.drawable.ic_default); return; } imageView.setTag(url); Drawable cacheDrawable = AsyncImageLoader.getInstance().loadDrawable(url, new ImageCallback() { @Override public void imageLoaded(Drawable imageDrawable, String imageUrl) { ImageView ivPhoto = (ImageView) ivPrivateList.findViewWithTag(imageUrl); if (ivPhoto != null) { if (imageDrawable != null) { ivPhoto.setImageDrawable(imageDrawable); NewsListAdapter.this.notifyDataSetChanged(); } else { ivPhoto.setImageResource(R.drawable.ic_default); } } } }); if (cacheDrawable != null) { imageView.setImageDrawable(cacheDrawable); } else { imageView.setImageResource(R.drawable.ic_default); } } } /** * 清除聊天列表信息 * */ private class ClearTask extends AsyncTask<Void, Void, JSONObject> { @Override protected void onPreExecute() { super.onPreExecute(); showPd("正在删除..."); } @Override protected JSONObject doInBackground(Void... params) { int uid = SharedPrefUtil.getUid(PrivateNewsListActivity.this); try { return new BusinessHelper().getClear(uid); } catch (SystemException e) { } return null; } @Override protected void onPostExecute(JSONObject result) { super.onPostExecute(result); dismissPd(); if (result != null) { if (result.has("status")) { try { int status = result.getInt("status"); if (status == Constants.REQUEST_SUCCESS) { showShortToast("清除成功"); if (isFilter) { newsListBean.clear(); } newsAdapter.notifyDataSetChanged(); } } catch (JSONException e) { showShortToast("服务器连接失败"); } } else { showShortToast("Json解析错误"); } } else { showShortToast("没有信息可删除哦"); } } } @Override protected void onRestart() { super.onRestart(); if (isCliclClear) { if (NetUtil.checkNet(PrivateNewsListActivity.this)) { pageIndex = 1; new PrivateNewsListTask(pageIndex).execute(); } else { showShortToast(R.string.NoSignalException); } } } }