package com.withiter.quhao.adapter; import java.text.NumberFormat; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.withiter.quhao.QHClientApplication; import com.withiter.quhao.R; import com.withiter.quhao.activity.ImagePagerActivity; import com.withiter.quhao.activity.LoginActivity; import com.withiter.quhao.task.CreateShareNiceTask; import com.withiter.quhao.task.JsonPack; import com.withiter.quhao.util.DateUtils; import com.withiter.quhao.util.StringUtils; import com.withiter.quhao.util.tool.QuhaoConstant; import com.withiter.quhao.util.tool.SharedprefUtil; import com.withiter.quhao.view.gridview.NoScrollGridView; import com.withiter.quhao.vo.ShareVO; public class ShareListAdapter extends BaseAdapter { private ListView listView; public List<ShareVO> shares; private Activity activity; private DisplayImageOptions options = null; private ImageLoadingListener animateFirstListener; public ShareListAdapter(Activity activity, ListView listView, List<ShareVO> shares,ImageLoadingListener animateFirstListener) { super(); this.listView = listView; this.shares = shares; this.activity = activity; options = new DisplayImageOptions.Builder() .showImageOnLoading(R.drawable.share_list_default_img) .showImageForEmptyUri(R.drawable.share_list_default_img) .showImageOnFail(R.drawable.share_list_default_img) .cacheInMemory(true) .cacheOnDisk(true) .considerExifParams(true) .displayer(new RoundedBitmapDisplayer(50)) .build(); this.animateFirstListener = animateFirstListener; } @Override public int getCount() { return shares.size(); } @Override public Object getItem(int position) { return shares.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ShareVO shareVO = (ShareVO) getItem(position); synchronized (shareVO) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflator = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflator.inflate(R.layout.share_list_item, null); holder.userImg = (ImageView) convertView.findViewById(R.id.user_img); holder.nickName = (TextView) convertView.findViewById(R.id.nickName); holder.shareImg = (NoScrollGridView) convertView.findViewById(R.id.share_img); holder.content = (TextView) convertView.findViewById(R.id.share_content); holder.location = (TextView) convertView.findViewById(R.id.location); holder.distance = (TextView) convertView.findViewById(R.id.distance); holder.date = (TextView) convertView.findViewById(R.id.date); holder.niceCount = (TextView) convertView.findViewById(R.id.nice_count); holder.shareNiceLayout = (LinearLayout) convertView.findViewById(R.id.share_nice_layout); holder.shareNiceImg = (ImageView) convertView.findViewById(R.id.share_nice_img); } if (holder == null) { holder = (ViewHolder) convertView.getTag(); } // AsynImageLoader.getInstance().showImageAsyn(holder.userImg, position, shareVO.image, R.drawable.person_avatar); ImageLoader.getInstance().displayImage(shareVO.userImage, holder.userImg, options, animateFirstListener); holder.nickName.setText(shareVO.nickName); if (StringUtils.isNull(shareVO.nickName)) { holder.nickName.setText("无名氏"); } holder.content.setText(shareVO.content); if (StringUtils.isNull(shareVO.address) || !shareVO.showAddress) { holder.location.setText("未公开"); } else { holder.location.setText(shareVO.address); } String created = DateUtils.yyyyMMddHHmmss2yyyyMMdd(shareVO.date); holder.date.setText(created); if (StringUtils.isNotNull(shareVO.dis)) { double dis = Double.parseDouble(shareVO.dis); if(dis > 0) { if(dis>1000) { NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(1); holder.distance.setText(nf.format(dis/1000) + "km"); } else { holder.distance.setText(String.valueOf((int)dis) + "m"); } } else { holder.distance.setText("未定位"); } } else { holder.distance.setText("未定位"); } // AsynImageLoader.getInstance().showImageAsyn(holder.shareImg, position, shareVO.image, R.drawable.person_avatar); // ImageLoader.getInstance().displayImage(shareVO.image, holder.shareImg, options, animateFirstListener); if (StringUtils.isNotNull(shareVO.image)) { final String[] imgs = new String[]{shareVO.image}; holder.shareImg.setVisibility(View.VISIBLE); holder.shareImg.setAdapter(new MyGridAdapter(imgs, activity,animateFirstListener)); holder.shareImg.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { imageBrower(position,imgs); } }); } else { holder.shareImg.setVisibility(View.GONE); } holder.niceCount.setText(shareVO.up + ""); final String positionStr = String.valueOf(position); final String sId = shareVO.id; final long count = shareVO.up; if (shareVO.shareNiced) { holder.niceCount.setTextColor(activity.getResources().getColor(R.color.red_text)); holder.shareNiceImg.setImageResource(R.drawable.share_list_item_nice_ed); holder.shareNiceLayout.setEnabled(false); } else { holder.niceCount.setTextColor(activity.getResources().getColor(R.color.black_little)); holder.shareNiceImg.setImageResource(R.drawable.share_list_item_nice_nor); holder.shareNiceLayout.setEnabled(true); holder.shareNiceLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { if (QHClientApplication.getInstance().isLogined) { String accountId = SharedprefUtil.get(activity, QuhaoConstant.ACCOUNT_ID, ""); String url = "share/addNice?sid=" + sId + "&accountId=" + accountId; final CreateShareNiceTask task = new CreateShareNiceTask(0, activity, url); task.execute(new Runnable() { @Override public void run() { JsonPack jsonPack = task.jsonPack; if (jsonPack != null && StringUtils.isNotNull(jsonPack.getObj()) && "true".equals(jsonPack.getObj())) { Message msg = refreshNiceHandler.obtainMessage(); Map<String, String> obj = new HashMap<String, String>(); obj.put("position", positionStr); obj.put("up", (count + 1) + ""); msg.obj = obj; msg.sendToTarget(); } else { Message msg = refreshNiceHandler.obtainMessage(); Map<String, String> obj = new HashMap<String, String>(); obj.put("position", positionStr); obj.put("up", ""); msg.obj = obj; msg.sendToTarget(); } } }, new Runnable() { @Override public void run() { Message msg = refreshNiceHandler.obtainMessage(); Map<String, String> obj = new HashMap<String, String>(); obj.put("position", positionStr); obj.put("openNum", ""); msg.obj = obj; msg.sendToTarget(); } }); } else { Intent intentGetNumber = new Intent(activity, LoginActivity.class); intentGetNumber.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); activity.startActivity(intentGetNumber); } } }); } convertView.setTag(holder); return convertView; } } private Handler refreshNiceHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); Map<String, String> obj2 = (Map<String, String>) msg.obj; if (StringUtils.isNotNull(obj2.get("up"))) { int openNum = Integer.valueOf(obj2.get("up")); int position = Integer.valueOf(obj2.get("position")); updateView(position,openNum); } else { Toast.makeText(activity, "亲,网络有点异常哦。", Toast.LENGTH_SHORT).show(); } } }; private void updateView(int position, int up) { int visiblePos = listView.getFirstVisiblePosition(); shares.get(position).up = up; shares.get(position).shareNiced = true; int offset = position - visiblePos; // 只有在可见区域才更新 if(offset < 0) { return; } View view = listView.getChildAt(offset); ViewHolder holder = (ViewHolder)view.getTag(); holder.niceCount.setText("" + up); holder.niceCount.setTextColor(activity.getResources().getColor(R.color.red_text)); holder.shareNiceImg.setImageResource(R.drawable.share_list_item_nice_ed); holder.shareNiceLayout.setEnabled(false); } private void imageBrower(int position, String[] urls) { Intent intent = new Intent(activity, ImagePagerActivity.class); // 图片url,为了演示这里使用常量,一般从数据库中或网络中获取 intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_URLS, urls); intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_INDEX, position); activity.startActivity(intent); } class ViewHolder { ImageView userImg; TextView nickName; NoScrollGridView shareImg; TextView content; TextView location; // ImageView pinfenImage; TextView distance; TextView date; TextView niceCount; LinearLayout shareNiceLayout; ImageView shareNiceImg; } }