package com.hupu.games.adapter; import java.util.LinkedList; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.text.Html; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.method.LinkMovementMethod; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.hupu.games.R; import com.hupu.games.activity.HupuBaseActivity; import com.hupu.games.activity.WebViewActivity; import com.hupu.games.data.ChatEntity; /** * 聊天数据列表 * @author panyongjun * */ public class ChatListAdapter extends BaseAdapter { private LinkedList<ChatEntity> mListData; private LayoutInflater mInflater; HupuBaseActivity context; private String tag; private String prenick="— "; // private int [] emoji_ids; public ChatListAdapter(Context c,String TAG) { mInflater = LayoutInflater.from(c); context = (HupuBaseActivity)c; tag =TAG; //获取表情资源文件 // Resources res=c.getResources(); // String ss []=res.getStringArray(R.array.emoji_list); // emoji_ids =new int[ss.length]; // String pack =c.getPackageName(); // for(int i=0;i<ss.length;i++) // { // //反射 // emoji_ids[i]=res.getIdentifier(ss[i],"drawable",pack); // } } public void setData(LinkedList<ChatEntity> data) { mListData = data; notifyDataSetChanged(); } public void addData(ChatEntity data) { mListData.add(0, data); notifyDataSetChanged(); } class Holder { TextView txtContent; TextView txtName; ImageView imgEmoji; } @Override public ChatEntity getItem(int position) { if (mListData == null) return null; return mListData.get(position); } @Override public long getItemId(int position) { return 0; } @Override public int getCount() { if (mListData == null) return 0; return mListData.size(); } @Override public View getView(int pos, View contentView, ViewGroup arg2) { Holder item = null; ChatEntity entity = mListData.get(pos); if (contentView == null) { contentView = mInflater.inflate(R.layout.item_chat_msg, null); item = new Holder(); item.txtContent = (TextView) contentView .findViewById(R.id.txt_content); item.txtName = (TextView) contentView.findViewById(R.id.txt_name); item.txtContent.setMovementMethod(LinkMovementMethod.getInstance()); item.imgEmoji = (ImageView) contentView.findViewById(R.id.img_emoji); contentView.setTag(item); } else { item = (Holder) contentView.getTag(); } // int w3 = contentView.getMeasuredWidth(); if(entity.emoji ==null) { item.txtContent.setVisibility(View.VISIBLE); if(entity.cgift!=null && entity.cgift.linkColor!=null){ int color=Color.parseColor(entity.cgift.linkColor); item.txtContent.setTextColor(color); }else{ item.txtContent.setTextColor(context.getResources().getColor(R.color.res_cor1)); } item.txtContent.setText(Html.fromHtml(entity.content)); item.imgEmoji.setImageDrawable(null); item.imgEmoji.setVisibility(View.GONE); addLink(item.txtContent); RelativeLayout.LayoutParams param =(RelativeLayout.LayoutParams)item.txtName.getLayoutParams(); param.addRule(RelativeLayout.BELOW, R.id.txt_content); param.addRule(RelativeLayout.ALIGN_RIGHT, R.id.txt_content); } else { item.imgEmoji.setVisibility(View.VISIBLE); item.txtContent.setVisibility(View.GONE); RelativeLayout.LayoutParams param =(RelativeLayout.LayoutParams)item.txtName.getLayoutParams(); param.addRule(RelativeLayout.BELOW, R.id.img_emoji); param.addRule(RelativeLayout.ALIGN_RIGHT, R.id.img_emoji); setEmoji(item.imgEmoji,entity.emoji ); } // item.txtContent.setText(entity.content); item.txtName.setText(prenick + entity.username); setNickName(item.txtName ,entity.vip,entity.username); if (entity.username.equals("")) contentView.setVisibility(View.GONE); else contentView.setVisibility(View.VISIBLE); // int w = // View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); // int h = // View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED); // // item.txtContent.measure(w, h); // item.txtName.measure(w, h); // // int w1= item.txtContent.getMeasuredWidth(); // int w2 =item.txtName.getMeasuredWidth(); // // Log.d("getview", "pos=="+pos+" w1=="+w1+" w2=="+w2+" w3=="+w3); // if ( w1<w2) // { // item.txtContent.setWidth(w1+10); // } return contentView; } private void setNickName(TextView tv ,int vip,String name) { if(vip ==0) { tv.setText(prenick + name); tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); tv.setTextColor(0xff919191); } else { tv.setText(prenick + name); tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.icon_vip1, 0); tv.setTextColor(0xffff0000); } } private void addLink(TextView tv) { CharSequence text = tv.getText(); if (text instanceof Spannable) { int end = text.length(); Spannable sp = (Spannable) tv.getText(); URLSpan[] urls = sp.getSpans(0, end, URLSpan.class); SpannableStringBuilder style = new SpannableStringBuilder(text); style.clearSpans();// should clear old spans for (URLSpan url : urls) { MyURLSpan myURLSpan = new MyURLSpan(url.getURL()); style.setSpan(myURLSpan, sp.getSpanStart(url), sp.getSpanEnd(url), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } tv.setText(style); } } private class MyURLSpan extends ClickableSpan { private String mUrl; MyURLSpan(String url) { mUrl = url; } @Override public void onClick(View widget) { // Log.d(" text view", "murl" + mUrl); Intent in = new Intent(context, WebViewActivity.class); in.putExtra("url", mUrl); context.startActivity(in); } } private void setEmoji(ImageView img,String res) { int start =res.indexOf("_"); int index =0; try { index =Integer.parseInt(res.substring(start+1)); } catch (NumberFormatException e) { e.printStackTrace(); } } }