RecyclerView局部更新
第一种:
recyclerView.post(new Runnable()
{
@Override
public void run()
{
if (mLinearLayoutManager != null)
{
//获取最后一个可见view的位置
int lastItemPosition = mLinearLayoutManager.findLastVisibleItemPosition();
//获取第一个可见view的位置
int firstItemPosition = mLinearLayoutManager.findFirstVisibleItemPosition();
/**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/
if (position >= firstItemPosition && position <= lastItemPosition)
{
RecyclerView.ViewHolder viewHolder = recyclerView.findViewHolderForAdapterPosition(position);
updateFileStatusViewHolder(viewHolder, msgBaseBean);
}
}
}
});
第二种:
notifyItemChanged(); 有限制
ListView局部更新
/**
* 第一种方法 更新对应view的内容
*
* @param position 要更新的位置
*/
private void updateSingle(int position) {
/**第一个可见的位置**/
int firstVisiblePosition = listView.getFirstVisiblePosition();
/**最后一个可见的位置**/
int lastVisiblePosition = listView.getLastVisiblePosition();
/**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/
if (position >= firstVisiblePosition && position <= lastVisiblePosition) {
/**获取指定位置view对象**/
View view = listView.getChildAt(position - firstVisiblePosition);
TextView textView = (TextView) view.findViewById(R.id.textView);
textView.setText(datas.get(position));
}
}
https://blog.csdn.net/linglongxin24/article/details/53020164?ref=myread
https://blog.csdn.net/sinat_31057219/article/details/73476861
https://www.jianshu.com/p/907f84b5d559
https://www.jianshu.com/p/c5ca75d3a78c
https://www.jianshu.com/p/57e569087ffc
https://blog.csdn.net/zxt0601/article/details/52562770 【Android】RecyclerView的好伴侣:详解DiffUtil
https://www.jianshu.com/p/4eecf631b949 RecyclerView如何使用正确notifyItemRemoved
https://www.cnblogs.com/Fndroid/p/5789470.html Android开发学习之路-DiffUtil使用教程
https://blog.csdn.net/u014099894/article/details/51724223 Android 使用RecyclerView实现多列布局及其优劣,多行 多列
使用RecyclerView实现
主要依靠GridLayoutMananger和它的一个方法setSpanSizeLookup来实现。
/*
传入所有列数的最小公倍数,1和4的最小公倍数为4,即意味着每一列将被分为4格
*/
GridLayoutManager gridLayoutManager = new GridLayoutManager(this.getContext(), 4);
//设置表格,根据position计算在该position处1列占几格数据
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override public int getSpanSize(int position) {
//计算在哪个position时要显示1列数据,即columnCount / 1列 = 4格,即1列数据占满4格
if (position == 0 || position == mTopGridData.size() + 1) {
return 4;
}
//return 2即为columnCount / 2 = 2列,一格数据占2列,该行显示2列
//1格1列,即改行有columnCount / 1 = 4列,该行显示4列
return 1;
}
});
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setAdapter(new DoubleGridAdapter(getContext(), mTopGridData, mBottomGridList, this));//设置数据
使用RecyclerView
好处是仅用一个布局,减少了布局层次嵌套,有时候甚至可以把 完成 按钮也当做一列数据。
但是这种方式乍一看很简单,其复杂性体现在对数据的处理上和UI变化上。筛选器中必须要把当前选中的Holder回调出来,保存其数据并更新其UI。尤其在有全部选项时或者多选时。当列越多思路必须要越清晰。
https://blog.csdn.net/yearningseeker/article/details/79709802 recyclerView中GridLayoutManager实现每一行不同布局的问题
https://www.jianshu.com/p/675883c26ef2 RecyclerView通过GridLayoutManager实现多样式布局
https://www.jianshu.com/p/4af59d8aa9f3 android RecyclerView GridLayoutManager 多布局(每个Item带标题)