package org.aisen.weibo.sina.ui.component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.aisen.weibo.sina.R; import org.aisen.weibo.sina.support.utils.AisenUtil; import org.aisen.weibo.sina.support.utils.AppContext; import org.aisen.weibo.sina.support.utils.ImageConfigUtils; import org.aisen.weibo.sina.ui.activity.comment.TimelineCommentsActivity; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import org.aisen.weibo.sina.ui.fragment.mention.MentionTimelineFragment; import org.aisen.weibo.sina.ui.widget.AisenTextView; import org.aisen.weibo.sina.ui.widget.TimelinePicsView; import org.android.loader.BitmapLoader; import org.sina.android.bean.Group; import org.sina.android.bean.StatusContent; import org.sina.android.bean.WeiBoUser; import android.content.DialogInterface; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.text.Html; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.TextView; import com.m.common.context.GlobalContext; import com.m.support.Inject.ViewInject; import com.m.support.adapter.ABaseAdapter.AbstractItemView; import com.m.ui.fragment.ABaseFragment; /** * timeline的ListView的item * * @author wangdan * */ public class TimelineItemView extends AbstractItemView<StatusContent> implements OnClickListener { private ABaseFragment fragment; private BizFragment bizFragment; private boolean showRetweeted; private StatusContent reStatus; public TimelineItemView(ABaseFragment fragment, boolean showRetweeted) { this(fragment, null, showRetweeted); } // 2014-08-24 新增这个构造方法,解决转发列表,点击转发菜单时,没有带上原微博的BUG public TimelineItemView(ABaseFragment fragment, StatusContent reStatue, boolean showRetweeted) { this(); this.fragment = fragment; this.reStatus = reStatue; try { bizFragment = BizFragment.getBizFragment(fragment); } catch (Exception e) { } this.showRetweeted = showRetweeted; } public TimelineItemView() { vPadding = GlobalContext.getInstance().getResources().getDimensionPixelSize(R.dimen.vertical_gap); if (AppContext.getGroups() != null && (groupMap == null || groupMap.size() != AppContext.getGroups().getLists().size())) { groupMap = new HashMap<String, String>(); for (Group group : AppContext.getGroups().getLists()) groupMap.put(group.getIdstr(), group.getName()); } } @ViewInject(id = R.id.imgPhoto) ImageView imgPhoto; @ViewInject(id = R.id.txtName) TextView txtName; @ViewInject(id = R.id.imgVerified) ImageView imgVerified; @ViewInject(id = R.id.txtDesc) TextView txtDesc; @ViewInject(id = R.id.txtRepost) TextView txtRepost; @ViewInject(id = R.id.txtComment) TextView txtComment; @ViewInject(id = R.id.txtContent) AisenTextView txtContent; @ViewInject(id = R.id.layRe) View layRe; @ViewInject(id = R.id.imgRePhoto) ImageView imgRePhoto; @ViewInject(id = R.id.txtReName) TextView txtReName; @ViewInject(id = R.id.imgReVerified) ImageView imgReVerified; @ViewInject(id = R.id.txtReDesc) TextView txtReDesc; @ViewInject(id = R.id.txtReContent) AisenTextView txtReContent; @ViewInject(id = R.id.layPicturs) TimelinePicsView layPicturs; @ViewInject(id = R.id.btnMenus) View btnMenus; @ViewInject(id = R.id.txtVisiable) TextView txtVisiable; private int vPadding; private static Map<String, String> groupMap; @Override public int inflateViewId() { return R.layout.item_timeline_v2; } @Override public void bindingData(View convertView, StatusContent data) { if (bizFragment == null) { try { bizFragment = BizFragment.getBizFragment(fragment); } catch (Exception e) { } if (bizFragment == null) return; } WeiBoUser user = data.getUser(); // userInfo setUserInfo(user, txtName, imgPhoto, imgVerified); // desc String createAt = ""; if (!TextUtils.isEmpty(data.getCreated_at())) createAt = AisenUtil.convDate(data.getCreated_at()); String from = ""; if (!TextUtils.isEmpty(data.getSource())) from = String.format("%s", Html.fromHtml(data.getSource())); String desc = String.format("%s %s", createAt, from); txtDesc.setText(desc); // counter if (TextUtils.isEmpty(data.getReposts_count()) || Integer.parseInt(data.getReposts_count()) == 0) { txtRepost.setVisibility(View.GONE); } else { txtRepost.setVisibility(View.VISIBLE); txtRepost.setText(AisenUtil.getCounter(Integer.parseInt(data.getReposts_count()))); } if (TextUtils.isEmpty(data.getComments_count()) || Integer.parseInt(data.getComments_count()) == 0) { txtComment.setVisibility(View.INVISIBLE); } else { txtComment.setVisibility(View.VISIBLE); txtComment.setText(AisenUtil.getCounter(Integer.parseInt(data.getComments_count()))); } // 文本 AisenUtil.setTextSize(txtContent); // txtContent.setText(data.getText()); txtContent.setContent(data.getText()); // reContent StatusContent reContent = data.getRetweeted_status(); if (reContent == null || !showRetweeted) { layRe.setVisibility(View.GONE); } else { layRe.setVisibility(View.VISIBLE); layRe.setTag(reContent); // layRe.setOnClickListener(this); // reUserInfo WeiBoUser reUser = reContent.getUser(); setUserInfo(reUser, txtReName, imgRePhoto, imgReVerified); // re desc from = ""; createAt = ""; if (!TextUtils.isEmpty(reContent.getCreated_at())) createAt = AisenUtil.convDate(reContent.getCreated_at()); if (!TextUtils.isEmpty(reContent.getSource())) from = String.format("%s", Html.fromHtml(reContent.getSource())); desc = String.format("%s %s", createAt, from); txtReDesc.setText(desc); // re content // txtReContent.setText(reContent.getText()); txtReContent.setContent(reContent.getText()); AisenUtil.setTextSize(txtReContent); } // pictures StatusContent s = data.getRetweeted_status() != null ? data.getRetweeted_status() : data; layPicturs.setPics(showRetweeted ? s : data, bizFragment, fragment); // group visiable txtVisiable.setVisibility(View.GONE); if (data.getVisible() != null && groupMap != null) { String name = groupMap.get(data.getVisible().getList_id()); if (!TextUtils.isEmpty(name)) { txtVisiable.setText(String.format(fragment.getString(R.string.publish_group_visiable), name)); txtVisiable.setVisibility(View.VISIBLE); if (layPicturs.getVisibility() == View.GONE) { txtVisiable.setPadding(0, 0, 0, 0); } else { txtVisiable.setPadding(0, vPadding, 0, 0); } } } if (reStatus != null) data.setRetweeted_status(reStatus); btnMenus.setTag(data); btnMenus.setOnClickListener(this); AisenUtil.setAlpha(convertView); } private void setUserInfo(WeiBoUser user, TextView txtName, ImageView imgPhoto, ImageView imgVerified) { if (user != null) { txtName.setText(AisenUtil.getUserScreenName(user)); BitmapLoader.getInstance().display(fragment, AisenUtil.getUserPhoto(user), imgPhoto, ImageConfigUtils.getLargePhotoConfig()); bizFragment.userShow(imgPhoto, user); AisenUtil.setImageVerified(imgVerified, user); } else { imgPhoto.setImageDrawable(new ColorDrawable(Color.GRAY)); bizFragment.userShow(imgPhoto, null); imgVerified.setVisibility(View.GONE); } } @Override public void onClick(View v) { // 查看转发微博信息 if (v.getId() == R.id.layRe) { StatusContent reContent = (StatusContent) v.getTag(); TimelineCommentsActivity.launch(fragment, reContent); } // 溢出菜单 else if (v.getId() == R.id.btnMenus) { final String[] timelineMenuArr = GlobalContext.getInstance().getResources().getStringArray(R.array.timeline_menus); final StatusContent status = (StatusContent) v.getTag(); List<String> menuList = new ArrayList<String>(); if (status.getRetweeted_status() != null && status.getRetweeted_status().getUser() != null) menuList.add(timelineMenuArr[0]); menuList.add(timelineMenuArr[1]); if (status.getVisible() == null || "0".equals(status.getVisible().getType())) menuList.add(timelineMenuArr[2]); menuList.add(timelineMenuArr[3]); menuList.add(timelineMenuArr[4]); menuList.add(timelineMenuArr[5]); if (status.getUser() != null && status.getUser().getIdstr().equals(AppContext.getUser().getIdstr())) menuList.add(timelineMenuArr[6]); if (fragment instanceof MentionTimelineFragment) menuList.add(timelineMenuArr[7]); final String[] menus = new String[menuList.size()]; for (int i = 0; i < menuList.size(); i++) menus[i] = menuList.get(i); AisenUtil.showMenuDialog(fragment, v, menus, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { AisenUtil.timelineMenuSelected(fragment, menus[which], status); } }); } } }