20180530_安卓ViewPager嵌套NestedScrollView的冲突解决方案
我的解决方案就是放弃ViewPager
,改用RecyclerView
+PagerSnapHelper
,效果是一模一样的。
部分参考代码
tl_tabs = (TabLayout) findViewById(R.id.tl_tabs);
tl_tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
rv_pages.smoothScrollToPosition(tab.getPosition()); // 关联RecyclerView
}
//略
});
rv_pages = (RecyclerView) findViewById(R.id.rv_pages);
final LinearLayoutManager llm = new LinearLayoutManager(this);
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
rv_pages.setLayoutManager(llm);
adapter = new PagerAdapter();
rv_pages.setAdapter(adapter);
rv_pages.addOnScrollListener(new RecyclerView.OnScrollListener() {
private int mPreviousScrollState;
private int mScrollState;
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
int position = llm.findFirstVisibleItemPosition();
TabLayout.Tab tab = tl_tabs.getTabAt(position);
if (tab != null) {
tab.select(); // 关联TabLayout
}
break;
}
}
//略
});
new PagerSnapHelper().attachToRecyclerView(rv_pages); // 使用PagerSnapHelper来实现ViewPager整页滚动效果