通过创建NestedScrollView,您可以将滚动视图放在另一个滚动视图中,只要这些视图正确实现NestedScrollingChild和NestedScrollingParent.
(这是一个不错的设计模式"Ian Lake(来自Google)实际上建议在RecyclerView这里放置一个nestedscrollview:plus.google.com/u/0/+AndroidDevelopers/posts/9kZ3SsXdT2T")
我想将RecyclerView放在NestedScrollView中,幸运的是RecyclerView实现了NestedScrollingChild,因此您可以将它放在NestedScrollView中.
public class RecyclerView extends ViewGroup implements ScrollingView, NestedScrollingChild
Run Code Online (Sandbox Code Playgroud)
我看过这些帖子:
如何在NestedScrollView中使用RecyclerView?
NestedScroll与NestedScrollView,RecyclerView(水平),在CoordinatorLayout内
但是大多数投票解决方案的问题是,它调用所有项目,RecyclerView例如,如果它是无尽的RecyclerView,当用户到达列表的末尾时,您想要发出网络请求,然后使用该解决方案RecyclerView重复调用服务器因为它会自动到达最后一项RecyclerView.
无论如何,如何设置参数,以便我可以放入RecyclerView内部NestedScrollView.(实际上我想将一个像framelayout或relativelayout这样的视图组作为nestedscrollview的单个childe然后我想将recyclelerview放在framelayout或relativelayout中)
当我放在RecyclerView里面NestedScrollView没有什么可以显示.
要创建示例项目,您可以使用cheesesquare并更改CheeseDetailActivity为具有RecyclerView.
虽然BNK的答案不正确,但BNK已经尝试了很多.所以我授予他赏金.还在寻找好的解决方案....
编辑:
我从webservice加载了200多个数据.当我向下滚动recyclerview时,它不会触发scrollLisener.
因为,如果我没有使用dy> 0条件,它将加载所有接下来的20个数据,20个数据,依此类推,最初是在进行此活动时.
下面我发布了相关的代码.
logcat的:
E/dy: 0
Run Code Online (Sandbox Code Playgroud)
活动代码:
recyclerView = (RecyclerView) findViewById(R.id.rv_list_tab_home_recycler);
recyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
recyclerView.setLayoutManager(mLayoutManager);
//homePostitemsAdapter = new UserPostAdapter(TabHomeActivity.this, homePostItemsList);
homePostitemsAdapter = new TabHomeAdapter(homePostItemsList, recyclerView);
// recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(homePostitemsAdapter);
recyclerView.setNestedScrollingEnabled(false);
Run Code Online (Sandbox Code Playgroud)
适配器代码:
private int visibleThreshold = 5;
private int lastVisibleItem, totalItemCount;
private boolean loading;
private OnLoadMoreListener onLoadMoreListener;
public TabHomeAdapter(List<HomePostItems> objects, RecyclerView recycle) {
homePostArrListItems = objects;
if (recycle.getLayoutManager() instanceof LinearLayoutManager) {
final LinearLayoutManager linearLayoutManager = (LinearLayoutManager) recycle
.getLayoutManager();
Log.e("LinearLayoutManager", "Test");
recycle.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void …Run Code Online (Sandbox Code Playgroud)