package org.cnodejs.android.md.ui.viewholder; import android.app.Activity; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckedTextView; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.bumptech.glide.Glide; import org.cnodejs.android.md.R; import org.cnodejs.android.md.model.entity.Topic; import org.cnodejs.android.md.model.entity.TopicWithReply; import org.cnodejs.android.md.presenter.contract.ITopicHeaderPresenter; import org.cnodejs.android.md.presenter.implement.TopicHeaderPresenter; import org.cnodejs.android.md.ui.activity.LoginActivity; import org.cnodejs.android.md.ui.activity.UserDetailActivity; import org.cnodejs.android.md.ui.view.ITopicHeaderView; import org.cnodejs.android.md.ui.widget.ContentWebView; import org.cnodejs.android.md.util.FormatUtils; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class TopicHeader implements ITopicHeaderView { @BindView(R.id.layout_content) protected ViewGroup layoutContent; @BindView(R.id.icon_good) protected View iconGood; @BindView(R.id.tv_title) protected TextView tvTitle; @BindView(R.id.img_avatar) protected ImageView imgAvatar; @BindView(R.id.ctv_tab) protected CheckedTextView ctvTab; @BindView(R.id.tv_login_name) protected TextView tvLoginName; @BindView(R.id.tv_create_time) protected TextView tvCreateTime; @BindView(R.id.tv_visit_count) protected TextView tvVisitCount; @BindView(R.id.btn_favorite) protected ImageView btnFavorite; @BindView(R.id.web_content) protected ContentWebView webContent; @BindView(R.id.layout_no_reply) protected ViewGroup layoutNoReply; @BindView(R.id.layout_reply_count) protected ViewGroup layoutReplyCount; @BindView(R.id.tv_reply_count) protected TextView tvReplyCount; private final Activity activity; private Topic topic; private boolean isCollect; private final ITopicHeaderPresenter topicHeaderPresenter; public TopicHeader(@NonNull Activity activity, @NonNull ListView listView) { this.activity = activity; View headerView = LayoutInflater.from(activity).inflate(R.layout.header_topic, listView, false); listView.addHeaderView(headerView, null, false); ButterKnife.bind(this, headerView); this.topicHeaderPresenter = new TopicHeaderPresenter(activity, this); } @OnClick(R.id.img_avatar) protected void onBtnAvatarClick() { UserDetailActivity.startWithTransitionAnimation(activity, topic.getAuthor().getLoginName(), imgAvatar, topic.getAuthor().getAvatarUrl()); } @OnClick(R.id.btn_favorite) protected void onBtnFavoriteClick() { if (topic != null) { if (LoginActivity.checkLogin(activity)) { if (isCollect) { topicHeaderPresenter.decollectTopicAsyncTask(topic.getId()); } else { topicHeaderPresenter.collectTopicAsyncTask(topic.getId()); } } } } public void updateViews(@Nullable Topic topic, boolean isCollect, int replyCount) { this.topic = topic; this.isCollect = isCollect; if (topic != null) { layoutContent.setVisibility(View.VISIBLE); iconGood.setVisibility(topic.isGood() ? View.VISIBLE : View.GONE); tvTitle.setText(topic.getTitle()); Glide.with(activity).load(topic.getAuthor().getAvatarUrl()).placeholder(R.drawable.image_placeholder).dontAnimate().into(imgAvatar); ctvTab.setText(topic.isTop() ? R.string.tab_top : topic.getTab().getNameId()); ctvTab.setChecked(topic.isTop()); tvLoginName.setText(topic.getAuthor().getLoginName()); tvCreateTime.setText(activity.getString(R.string.$s_create, FormatUtils.getRelativeTimeSpanString(topic.getCreateAt()))); tvVisitCount.setText(activity.getString(R.string.$d_count_visit, topic.getVisitCount())); btnFavorite.setImageResource(isCollect ? R.drawable.ic_favorite_theme_24dp : R.drawable.ic_favorite_outline_grey600_24dp); // 这里直接使用WebView,有性能问题 webContent.loadRenderedContent(topic.getContentHtml()); updateReplyCount(replyCount); } else { layoutContent.setVisibility(View.GONE); iconGood.setVisibility(View.GONE); } } public void updateViews(@NonNull TopicWithReply topic) { updateViews(topic, topic.isCollect(), topic.getReplyList().size()); } public void updateReplyCount(int replyCount) { layoutNoReply.setVisibility(replyCount > 0 ? View.GONE : View.VISIBLE); layoutReplyCount.setVisibility(replyCount > 0 ? View.VISIBLE : View.GONE); tvReplyCount.setText(activity.getString(R.string.$d_count_reply, replyCount)); } @Override public void onCollectTopicOk() { isCollect = true; btnFavorite.setImageResource(R.drawable.ic_favorite_theme_24dp); } @Override public void onDecollectTopicOk() { isCollect = false; btnFavorite.setImageResource(R.drawable.ic_favorite_outline_grey600_24dp); } }