package org.qii.weiciyuan.ui.adapter; import org.qii.weiciyuan.R; import org.qii.weiciyuan.bean.DMUserBean; import org.qii.weiciyuan.bean.UserBean; import org.qii.weiciyuan.support.asyncdrawable.IWeiciyuanDrawable; import org.qii.weiciyuan.support.asyncdrawable.TimeLineBitmapDownloader; import org.qii.weiciyuan.support.lib.ClickableTextViewMentionLinkOnTouchListener; import org.qii.weiciyuan.support.lib.TimeLineAvatarImageView; import org.qii.weiciyuan.support.settinghelper.SettingUtility; import org.qii.weiciyuan.support.utils.GlobalContext; import org.qii.weiciyuan.support.utils.TimeLineUtility; import org.qii.weiciyuan.support.utils.Utility; import org.qii.weiciyuan.support.utils.ViewUtility; import org.qii.weiciyuan.ui.basefragment.AbstractTimeLineFragment; import org.qii.weiciyuan.ui.userinfo.UserInfoActivity; import android.app.Activity; import android.content.Intent; import android.support.v4.app.Fragment; import android.text.TextPaint; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import java.util.List; /** * User: qii * Date: 12-11-14 */ public class DMUserListAdapter extends BaseAdapter { private List<DMUserBean> bean; private Fragment fragment; private LayoutInflater inflater; private ListView listView; private TimeLineBitmapDownloader commander; public DMUserListAdapter(Fragment fragment, List<DMUserBean> bean, ListView listView) { this.bean = bean; this.commander = TimeLineBitmapDownloader.getInstance(); this.inflater = fragment.getActivity().getLayoutInflater(); this.listView = listView; this.fragment = fragment; } protected Activity getActivity() { return fragment.getActivity(); } @Override public View getView(int position, View convertView, ViewGroup parent) { DMViewHolder holder = null; if (convertView == null || convertView.getTag() == null) { convertView = initSimpleLayout(parent); holder = buildHolder(convertView); convertView.setTag(R.drawable.ic_launcher + getItemViewType(position), holder); } else { holder = (DMViewHolder) convertView.getTag(); } configViewFont(holder); bindViewData(holder, position); return convertView; } private View initSimpleLayout(ViewGroup parent) { View convertView; convertView = inflater.inflate(R.layout.dm_user_list_listview_item_layout, parent, false); return convertView; } private DMViewHolder buildHolder(View convertView) { DMViewHolder holder = new DMViewHolder(); holder.username = ViewUtility.findViewById(convertView, R.id.username); TextPaint tp = holder.username.getPaint(); tp.setFakeBoldText(true); holder.content = ViewUtility.findViewById(convertView, R.id.content); holder.time = ViewUtility.findViewById(convertView, R.id.time); holder.avatar = (TimeLineAvatarImageView) convertView.findViewById(R.id.avatar); return holder; } private void configViewFont(DMViewHolder holder) { int prefFontSizeSp = SettingUtility.getFontSize(); float currentWidgetTextSizePx; currentWidgetTextSizePx = holder.time.getTextSize(); if (Utility.sp2px(prefFontSizeSp - 3) != currentWidgetTextSizePx) { holder.time.setTextSize(prefFontSizeSp - 3); } currentWidgetTextSizePx = holder.content.getTextSize(); if (Utility.sp2px(prefFontSizeSp) != currentWidgetTextSizePx) { holder.content.setTextSize(prefFontSizeSp); holder.username.setTextSize(prefFontSizeSp); } } protected void bindViewData(DMViewHolder holder, int position) { final DMUserBean msg = bean.get(position); UserBean user = msg.getUser(); if (user != null) { holder.username.setVisibility(View.VISIBLE); buildUsername(holder, user); buildAvatar(holder.avatar, position, user); } else { holder.username.setVisibility(View.INVISIBLE); holder.avatar.setVisibility(View.INVISIBLE); } if (!TextUtils.isEmpty(msg.getListViewSpannableString())) { holder.content.setText(msg.getListViewSpannableString()); } else { TimeLineUtility.addJustHighLightLinks(msg); holder.content.setText(msg.getListViewSpannableString()); } bindOnTouchListener(holder); String time = msg.getListviewItemShowTime(); if (!holder.time.getText().toString().equals(time)) { holder.time.setText(time); } holder.time.setTag(msg.getId()); } private void buildUsername(DMViewHolder holder, UserBean user) { if (!TextUtils.isEmpty(user.getRemark())) { holder.username.setText( new StringBuilder(user.getScreen_name()).append("(").append(user.getRemark()) .append(")").toString()); } else { holder.username.setText(user.getScreen_name()); } } private void bindOnTouchListener(DMViewHolder holder) { holder.username.setClickable(false); holder.time.setClickable(false); holder.content.setClickable(false); if (holder.content != null) { holder.content.setOnTouchListener(onTouchListener); } } protected List<DMUserBean> getList() { return bean; } public boolean hasStableIds() { return true; } @Override public int getCount() { if (getList() != null) { return getList().size(); } else { return 0; } } @Override public Object getItem(int position) { if (position >= 0 && getList() != null && getList().size() > 0 && position < getList() .size()) { return getList().get(position); } return null; } @Override public long getItemId(int position) { if (getList() != null && getList().get(position) != null && getList().size() > 0 && position < getList().size()) { return Long.valueOf(getList().get(position).getId()); } else { return -1; } } protected void buildAvatar(ImageView view, int position, final UserBean user) { ((IWeiciyuanDrawable) view).checkVerified(user); String image_url = user.getProfile_image_url(); if (!TextUtils.isEmpty(image_url)) { view.setVisibility(View.VISIBLE); commander.downloadAvatar(view, user, (AbstractTimeLineFragment) fragment); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getActivity(), UserInfoActivity.class); intent.putExtra("token", GlobalContext.getInstance().getSpecialToken()); intent.putExtra("user", user); getActivity().startActivity(intent); } }); } else { view.setVisibility(View.GONE); } } private static class DMViewHolder { TextView username; TextView content; TextView time; TimeLineAvatarImageView avatar; } private View.OnTouchListener onTouchListener = new View.OnTouchListener() { ClickableTextViewMentionLinkOnTouchListener listener = new ClickableTextViewMentionLinkOnTouchListener(); @Override public boolean onTouch(View v, MotionEvent event) { DMViewHolder holder = getViewHolderByView(v); if (holder == null) { return false; } boolean hasActionMode = ((AbstractTimeLineFragment) fragment).hasActionMode(); return !hasActionMode && listener.onTouch(v, event); } }; private DMViewHolder getViewHolderByView(View view) { try { final int position = listView.getPositionForView(view); if (position == ListView.INVALID_POSITION) { return null; } return getViewHolderByView(position); } catch (NullPointerException e) { } return null; } private DMViewHolder getViewHolderByView(int position) { int wantedPosition = position - 1; int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); int wantedChild = wantedPosition - firstPosition; if (wantedChild < 0 || wantedChild >= listView.getChildCount()) { return null; } View wantedView = listView.getChildAt(wantedChild); DMViewHolder holder = (DMViewHolder) wantedView .getTag(R.drawable.ic_launcher + getItemViewType(position)); return holder; } }