Android 点赞

点赞之后到底应该怎么处理,这个问题最近这个问题一直困扰着我。

下面是询问众多人之后:

1.点击之后向服务器发起请求,然后等待数据返回,根据返回的数据单条刷新(单条刷新这个问题我前面已经解决了)。

2.本地直接改变点赞状态和数量然后再向服务器发起请求,成功之后再进行带条数据刷新(如果是只能点赞不能取消这里

都可以省略了)。

可是这两条还是无法满足我要点击,要连续点击 点赞 - 取消 - 点赞 - 取消.... 这一系列操作。

当我今天忽然看见QQ空间和掌盟的点赞机制后,突然更加坚信了我的点赞逻辑 —— 点赞是在本地直接处理的。

QQ空间和掌盟的点赞机制:点击之后毫无延迟,直接变化,掌盟可以连续 点赞 - 取消 - 点赞 - 取消。最最关键的一点,

没有网络的情况下也是同样如此。)

下面是我自己的点赞逻辑:

/// 点赞逻辑 //
点击 ->  改变 ( 图片显示改变 + 数量改变 )-> 向后台发起数据请求
图片显示改变:
    根据当前的状态做出相反的改变
点赞数量改变:
    根据当前显示的数量和状态进行相应的改变
获取当前状态:
    无论是获取此条数据的状态还是后台重新获取单条数据刷新
    在可以 点赞 又可以 取消的情况下 是无法获取此时准确的状态
    所以只能从当前显示点赞图片的显示来判断点击时是什么状态
获取显示数量:
    直接从显示赞数量的TextView获取
// 获取点赞数量
int sum = Integer.parseInt(holder.likesSum.getText().toString());
// 定义点赞状态 0 未点赞 1 已点赞
int status;
// 判断此时显示的状态
if (holder.like.getDrawable() == isSupport) {
    //如果是点赞状态下 数量直接--
    sum--;
    // 状态为1
    status = 1;
    // 点击之后更改相反的显示图片
    holder.like.setImageDrawable(noSupport);
} else {
    // 如果是为未点赞状态 得先判断点赞数量是否为0
    if (sum == 0)
        sum = 1; // 0 则等于 1  0 无法 ++     else
        sum++; // 不为零则直接 ++
    // 此时点赞状态为未点赞
    status = 0;
    // 点击之后更改成已点赞
    holder.like.setImageDrawable(isSupport);
}
// 更新点赞数量
holder.likesSum.setText(sum + "");
// 向服务器发起请求  --  此时无论怎么点多少次,提交的status都是当前用户的选择
submitSupport(data.getId(), status);
无论用户点击多少次,请求每次反正都会发送,而最后一次点击请求的点赞状态就是当前用户选择的。

写到这里,更可以在请求之前延迟两秒,如果用户两秒之内没有点击则进行请求。

在点击之前也可以进行有无网络的判断。(这个无网络点击之后应该是在本地保存有网络了继续发送请求吧。

就像QQ空间无网络发布动态一样)。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值