华为 荣耀 6 上 popwindow 默认点击空白区域不会消失,给 popwindow 设置背景就好了
oppo 手机上,VideoView 在调用 start() 之后,立即 pause() 或者 在 setOnPreparedListener 的毁掉中 pause() 中都会导致黑屏,解决
mVideoView.start()
mVideoView.setOnPreparedListener{
mVideoView.postDelayed({mVideoView.pause()}, 10)
}
RecyclerView 上拉加载导致的数据重复,代码如下
ScrollListener
private void initialScrollListener() {
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
LinearLayoutManager lm = (LinearLayoutManager) recyclerView.getLayoutManager();
int totalItemCount = recyclerView.getAdapter().getItemCount();
int lastVisibleItemPosition = lm.findLastVisibleItemPosition();
int visibleItemCount = recyclerView.getChildCount();
if (newState == RecyclerView.SCROLL_STATE_IDLE
&& lastVisibleItemPosition == totalItemCount - 1
&& visibleItemCount > 0) {
//加载更多
if (adapter != null && adapter.getItemCount() > 6) {
KtAllCourseFragmentAgent.Companion.findByTag(AllCourseFragment.this, adapter.tag, page);
}
}
}
});
}
如上代码中,在实际运行的时候,发现 KtAllCourseFragmentAgent.Companion.findByTag(AllCourseFragment.this, adapter.tag, page); 这行代码,同时执行了不止一次,再看我添加数据的代码:
attach data
public void attach(ArrayList<CourseVo> courseVos, String tag, int page) {
if (page == 0) {
adapter.setCourseVos(courseVos);
} else {
if (this.page == page) {
adapter.addCourseVos(courseVos);
}
}
adapter.tag = tag;
if (courseVos != null && !courseVos.isEmpty()) {
this.page = page + 1;
}
}
adapter add data
public void addCourseVos(List<CourseVo> vos) {
int start = courseVos.size();
courseVos.addAll(vos);
notifyItemRangeInserted(start, vos.size());
以上代码最终导致了,数据的重复错乱。
解决办法代码:
synchronized (AllCourseFragment.this) {
KtAllCourseFragmentAgent.Companion.findByTag(AllCourseFragment.this, adapter.tag, page);
}
论 java 基础的重要性!