最近的项目中遇到如下需求
原告,被告,代理人分别对应三个recyclerview,每次点击栏目的加号时增加一个条目,并滚动到新增的条目的位置.
布局如下:
从上到下三个RecyclerView分别称之为rv_1,rv_2,rv_3,外层的scrollview称为sv_all
理想中应该调用RecyclerView的smoothScrollToPosition(adapterYG.getItemCount() - 1)就能实现三个列表都滚动到最底端,但是撸完代码后发现效果不尽人意,于是尝试了其他办法.用三中不同的方式实现了RecyclerView和ScrollView滚动到最底部的办法
rv_1实现滚动的方式:
adapter.notifyDataSetChanged();
rv_1.smoothScrollToPosition(adapter.getItemCount() - 1);
(rv_2使用上面的方法时失效了,并没有滚动,于是把rv_2先放着,先解决rv_3,很奇怪,rv_3使用smoothScrollToPosition函数也不生效,但是考虑到,rv_3处于sc_all的最底层,滚动scrollview到最底层和滚动rv_3的效果一样,于是换一种办法解决)
rv_3实现滚动的方式:
//数据刷新后直接调用fullscroll并不会生效,需要在handle线程中执行
new Handler().post(new Runnable() {
@Override
public void run() {
sv_all.fullScroll(ScrollView.FOCUS_DOWN);
}
});
rv_2实现滚动的方式:
(由于rv_2直接调用smoothScrollToPosition失效,所以只能考虑按照rv_3的实现方式来实现,在rv_2的外层包裹一层SrcollView id:srcollView2+LinearLayout id:ll_2 ,但是仿照rv_3直接调用fullScroll居然也失败了,于是只能用第三种办法,自己算滚动的距离)
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//end要显示的位置,可以根据自己的需要来计算
int end = (ll_2.getMeasuredHeight());
if (end < 0) {
end = 0;
}
scrollView2.scrollTo(0, end);
}
}, 100);
最终用了三个办法,,,实现了三个recyclerview的滑动到最底部,,,,,