@OnClick(R.id.topic_item_reply_btn_ups) protected void onBtnUpsClick() { if (TextUtils.isEmpty(LoginShared.getAccessToken(activity))) { showNeedLoginDialog(); } else if (reply.getAuthor().getLoginName().equals(LoginShared.getLoginName(activity))) { Toast.makeText(activity, "不能帮自己点赞", Toast.LENGTH_SHORT).show(); } else { upTopicAsyncTask(this); } }
public void update(int position) { this.position = position; reply = topic.getReplies().get(position); Picasso.with(activity) .load(reply.getAuthor().getAvatarUrl()) .placeholder(R.drawable.image_placeholder) .into(imgAvatar); tvLoginName.setText(reply.getAuthor().getLoginName()); tvIndex.setText(position + 1 + "楼"); tvCreateTime.setText(FormatUtils.getRecentlyTimeText(reply.getCreateAt())); btnUps.setText(String.valueOf(reply.getUps().size())); btnUps.setCompoundDrawablesWithIntrinsicBounds( reply.getUps().contains(LoginShared.getId(activity)) ? R.drawable.main_nav_ic_good_theme_24dp : R.drawable.main_nav_ic_good_grey_24dp, 0, 0, 0); iconDeepLine.setVisibility( position == topic.getReplies().size() - 1 ? View.GONE : View.VISIBLE); iconShadowGap.setVisibility( position == topic.getReplies().size() - 1 ? View.VISIBLE : View.GONE); // TODO 这里直接使用WebView,有性能问题 webReplyContent.loadRenderedContent(reply.getRenderedContent()); }
@OnClick(R.id.topic_item_reply_btn_at) protected void onBtnAtClick() { if (TextUtils.isEmpty(LoginShared.getAccessToken(activity))) { showNeedLoginDialog(); } else { onAtClickListener.onAt(reply.getAuthor().getLoginName()); } }
@OnClick(R.id.topic_fab_reply) protected void onBtnReplyClick() { if (topic != null) { if (TextUtils.isEmpty(LoginShared.getAccessToken(this))) { adapter.showNeedLoginDialog(); } else { replyWindow.showAtLocation(layoutRoot, Gravity.BOTTOM, 0, 0); } } }
private void replyTopicAsyncTask(final String content) { dialog.show(); ApiClient.service.replyTopic( LoginShared.getAccessToken(TopicActivity.this), topicId, content, null, new Callback<Map<String, String>>() { @Override public void success(Map<String, String> result, Response response) { dialog.dismiss(); // 本地创建一个回复对象 Reply reply = new Reply(); reply.setId(result.get("reply_id")); Author author = new Author(); author.setLoginName(LoginShared.getLoginName(TopicActivity.this)); author.setAvatarUrl(LoginShared.getAvatarUrl(TopicActivity.this)); reply.setAuthor(author); reply.setContent(content); reply.setCreateAt(new DateTime()); reply.setUps(new ArrayList<String>()); topic.getReplies().add(reply); // 更新adapter并让recyclerView滑动到最底部 replyWindow.dismiss(); if (topic.getReplies().size() == 1) { // 需要全刷新 adapter.notifyDataSetChanged(); } else { // 插入刷新 adapter.notifyItemChanged(topic.getReplies().size() - 1); adapter.notifyItemInserted(topic.getReplies().size()); } recyclerView.smoothScrollToPosition(topic.getReplies().size()); // 清空回复框内容 edtContent.setText(null); // 提示 Toast.makeText(TopicActivity.this, "发送成功", Toast.LENGTH_SHORT).show(); } @Override public void failure(RetrofitError error) { dialog.dismiss(); if (error.getResponse() != null && error.getResponse().getStatus() == 403) { adapter.showAccessTokenErrorDialog(); } else { Toast.makeText(TopicActivity.this, R.string.network_faild, Toast.LENGTH_SHORT) .show(); } } }); }
private void upTopicAsyncTask(final ReplyViewHolder holder) { final int position = holder.position; // 标记当时的位置信息 final Reply reply = holder.reply; // 保存当时的回复对象 ApiClient.service.upTopic( LoginShared.getAccessToken(activity), holder.reply.getId(), new Callback<TopicUpInfo>() { @Override public void success(TopicUpInfo info, Response response) { if (info.getAction() == TopicUpInfo.Action.up) { reply.getUps().add(LoginShared.getId(activity)); } else if (info.getAction() == TopicUpInfo.Action.down) { reply.getUps().remove(LoginShared.getId(activity)); } // 如果位置没有变,则更新界面 if (position == holder.position) { holder.btnUps.setText(String.valueOf(holder.reply.getUps().size())); holder.btnUps.setCompoundDrawablesWithIntrinsicBounds( holder.reply.getUps().contains(LoginShared.getId(activity)) ? R.drawable.main_nav_ic_good_theme_24dp : R.drawable.main_nav_ic_good_grey_24dp, 0, 0, 0); } } @Override public void failure(RetrofitError error) { if (error.getResponse() != null && error.getResponse().getStatus() == 403) { showAccessTokenErrorDialog(); } else { Toast.makeText(activity, "网络访问失败,请重试", Toast.LENGTH_SHORT).show(); } } }); }