ScrollView嵌套RecyclerView数据显示不全
解决方案
查看代码,布局中没有给RecycleView设置layoutManager,发现是代码中动态设置的。1
2
3
4
5
6
7
8LinearLayoutManager classifyDataManager = new LinearLayoutManager(this) {
@Override
public boolean canScrollVertically() {
return false;
}
};
//配置布局,默认为vertical(垂直布局)
classifyDataManager.setOrientation(LinearLayoutManager.VERTICAL);
字面意思理解,canScrollVertically()方法return false,可能是数据显示不全的原因,试着改为return true,测试了下,数据显示正常了,RecycleView的数据必须通过滑动来查看,跟ScrollView滑动响应不一致,导致用户体验不好。
优化方案
查找资料,发现了一个NestedScrollView可以替换ScrollView,NestedScrollView的名字中其实就可以看出他的作用了,Nested是嵌套的意思。1
2最终解决方案ScrollView换为
<android.support.v4.widget.NestedScrollView>问题解决了
系统通知,点击消息未消失
项目中推送消息,使用MQTT协议来实现,拿到消息后,显示一个Notification,点击后,Notification未消失。增加如下两个属性。setContentIntent()与setAutoCancel()。1
2
3
4Notification.Builder builder = new Notification.Builder(this);
builder
.setContentIntent(contentIntent)
.setAutoCancel(true);
OkHttp上传图片服务器无法获取的问题
测试在现场提出一个问题,发布任务带图片,就发送失败,客户端网络请求走到了onFailure(),但是用PostMan测试,又能正常上传,Google发现,在OkHttp请求的时候,setType()设置的MultipartBody.FORM,未指定编码,导致服务器无法解析此请求,导致请求失败。1
2
3
4
5错误请求设置:
MultipartBody.Builder builder=new MultipartBody.Builder() .setType(MultipartBody.FORM);
正确请求设置:
MultipartBody.Builder builder = new MultipartBody.Builder().setType(MediaType.parse("multipart/form-data;charset=utf-8"));
相见恨晚的CountDownTimer
一般项目中注册发送验证码都会有一个倒计时的功能,以前的实现方式就是使用Handler+Thread方式,既然有了CountDownTimer,就不用那么复杂了,直接使用如下:1
2
3
4
5
6
7
8
9
10new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText(millisUntilFinished / 1000) + "秒后可重发");
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
CountDownTimer每隔1秒调用一次onTick(long millisUntilFinished)方法, 倒计时结束时调用onFinish()方法.
CountDownTimer是运行在主线程,可以直接更新UI