Ejemplo n.º 1
0
 @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);
   }
 }
Ejemplo n.º 2
0
    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());
    }
Ejemplo n.º 3
0
 @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();
              }
            }
          });
    }
Ejemplo n.º 6
0
  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();
            }
          }
        });
  }